gpt4 book ai didi

Java 正则表达式花费的时间太长

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:12:41 26 4
gpt4 key购买 nike

我有这个正则表达式

"((\\s{0,2})\\p{XDigit}{2}\\s{0,2})*"

用户可以像这样从字节转储中选择匹配的字符串 enter image description here

上面的选择应该是可能的,但是选择一半的字节不应该像这样 enter image description here

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

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

编辑:

所以我为这个案例构建了一个解决方案。我唯一需要检查的是字符串的开头和结尾。删除空格并检查拆分后的字符串的第一个和最后一个元素长度是否为 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) == ' '

虽然这不是很花哨,但会非常快。您只需测试是否有一个字符,然后是一个空格,反之亦然。

虽然这仅适用于基本验证。

关于Java 正则表达式花费的时间太长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25377533/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com