gpt4 book ai didi

java - 如何提高java中正则表达式的性能

转载 作者:行者123 更新时间:2023-12-01 22:37:36 25 4
gpt4 key购买 nike

我有这段代码可以将“=”之前的整个文本转换为大写

Matcher m = Pattern.compile("((?:^|\n).*?=)").matcher(conteudo);
while (m.find()) {
conteudo = conteudo.replaceFirst(m.group(1), m.group(1).toUpperCase());
}

但是当字符串太大时,它会变得非常慢,我想找到一种更快的方法来做到这一点。

有什么建议吗?

编辑

我没解释清楚。我有这样的文字

field=value
field2=value2
field3=value3

我想像这样转换每一行

FIELD=value
FIELD2=value2
FIELD3=value3

最佳答案

让正则表达式快速运行的最快方法是不使用正则表达式。对于性能敏感的操作来说,正则表达式从来都不是,而且几乎从来都不是一个好的选择。 (延伸阅读:Why are regular expressions so controversial?)

尝试使用 String 类方法,或者编写一个自定义方法来执行您想要的操作。使用在“=”上进行分割的分词器,然后在尾部部分(\n 之后的部分)使用 .toUpperCase()。或者,只需转换为 char[] 或使用 charAt() 并手动遍历它,在换行符后将字符切换到大写,在“=”后切换回常规方式。

例如:

public static String changeCase( String s ) {
boolean capitalize = true;
int len = s.length();
char[] output = new char[len];
for( int i = 0; i < len; i++ ) {
char input = s.charAt(i);
if ( input == '\n' ) {
capitalize = true;
output[i] = input;
} else if ( input == '=' ) {
capitalize = false;
output[i] = input;
} else {
output[i] = capitalize ? Character.toUpperCase(input) : input;
}
}
return new String(output);
}

方法输入:

field=value\n
field2=value2\n
field3=value3

方法输出:

FIELD=value\n
FIELD2=value2\n
FIELD3=value3

在这里试试:http://ideone.com/k0p67j

PS(杰米·扎文斯基):

Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems.

关于java - 如何提高java中正则表达式的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26673780/

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