我有这个正则表达式
"((\\s{0,2})\\p{XDigit}{2}\\s{0,2})*"
用户可以像这样从字节转储中选择匹配的字符串

上面的选择应该是可能的,但是选择一半字节不应该这样

开头或结尾的空格不应该是这样的问题

给定正则表达式的问题是匹配时间太长。我可以改善什么,什么问题?

编辑:

所以我为这种情况建立了解决方案。我唯一需要检查ist字符串的开头和结尾。删除空格并检查分割后的字符串的第一个和最后一个元素的长度是否为1。无论如何我都将其分割,因为在那之后我将其解析为字节数组。

        String selection = dumpText.getSelectionText();

        if (selection.equals(" ") || selection.equals("  ")){
            return;
        }

        //remove spaces at the beginning
        while(selection.charAt(0) == ' '){
            selection = selection.substring(1);
        }

        //remove spaces at the end
        while(selection.charAt(selection.length()-1) == ' '){
            selection = selection.substring(0, selection.length()-1);
        }

        String[] splitted = selection.split("\\s{1,2}");

        if(splitted.length == 0 || splitted[0].length()==1 || splitted[splitted.length-1].length()==1){
                return;
        }

最佳答案

当您问一些简单的问题时,基本的字符串比较会更有效。在这种情况下,您只对前2个字符和后2个字符感兴趣。

因此,您可以只测试那些(在验证长度之后):

s.charAt(0) != ' ' && s.charAt(1) == ' '
    && s.charAt(s.length - 1) != ' ' && s.charAt(s.length - 2) == ' '

尽管这并不那么花哨,但它会非常快。您只需要测试是否有一个字符,然后有一个空格,最后是相反。

不过,这仅适用于基本验证。

10-08 02:34