gpt4 book ai didi

java - 正则表达式的优化

转载 作者:行者123 更新时间:2023-12-01 11:45:04 26 4
gpt4 key购买 nike

我正在使用 jprofiler 来帮助我减少 CPU 使用率。这是我的两个场景:

场景 1:

//Global Variables
static Pattern escapeSequences = Pattern.compile("(\\r|\\n|\\t)");
static Pattern printableCharacters = Pattern.compile("[^\\p{Print}]");

String message = String.format(format, args);


return printableCharacters.matcher(escapeSequences.matcher(message).replaceAll("")).replaceAll("?");

场景 2:

            for (int i=0; i<args.length; ++i) {
if (args[i] instanceof String) {
args[i].replaceAll("(\\r|\\n|\\t)","").replaceAll("[^\\p{Print}]", "?");
}
}

return formater = String.format(format, args);

场景 1 的运行率约为 9%,而场景 2 的运行率约为 7%。我在这里不明白的是,如果正则表达式预编译一次而不是每次,为什么 cpu 更高?我该怎么做才能将 CPU 降低到 7% 以下。

最佳答案

我相信以下行: String.format(format, args); 就是原因。

在第一个示例中,您在替换字符之前执行它,在第二个示例中,您在后执行它。根据 format 变量,第一个示例中处理后的字符串可能会变得更大,从而影响执行时间。

此外,在第二个示例中,循环没有执行任何有用的操作 - replaceAll 创建新的 String 引用,并且您没有将其分配到任何地方。编译器可能只是优化此部分并丢弃此循环。底线是结果与第一个示例返回的结果不同。

关于java - 正则表达式的优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29216739/

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