gpt4 book ai didi

Java 字符串解析,什么更快?正则表达式或字符串方法?

转载 作者:搜寻专家 更新时间:2023-10-31 08:23:01 45 4
gpt4 key购买 nike

我正面临两难境地。我正在解析一个字符串并且可以做

s.matches(regex)

或者我可以做

s.startsWith(..) && s.endsWith(..)

正如您已经意识到的那样,这不是一个复杂的正则表达式,两种情况都可以。这个想法是,字符串可能很长(数百个字符),所以我希望最大限度地提高效率。什么有效,如何更好地解决问题?

最佳答案

这里有一个相当粗略的基准给你一个想法。使其适应您的用例,为您提供更相关的结果。

长话短说

  • startsWith()endsWith() 更快

详细结果

1 000 000 次运行后的结果:

- Uncompiled pattern:        1091 ms- Compiled pattern:          745 ms- startsWith() / endsWith(): 24 ms
public class TestRegex {

String regex = "^start.*end$";
Pattern p = Pattern.compile(regex);

String start = "start";
String end = "end";
String search = start + "fewbjlhfgljghfadsjhfdsaglfdhjgahfgfjkhgfdkhjsagafdskghjafdkhjgfadskhjgfdsakhjgfdaskhjgafdskjhgafdsjhkgfads" + end;

int runs = 1000000;

@Test
public final void test() {
// Init run
for (int i = 0; i < runs; i++) {
search.matches(regex);
}
for (int i = 0; i < runs; i++) {
p.matcher(search).matches();
}
for (int i = 0; i < runs; i++) {
search.startsWith(start);
search.endsWith(end);
}


// Timed run
Stopwatch s = Stopwatch.createStarted();
for (int i = 0; i < runs; i++) {
search.matches(regex);
}
System.out.println(s.elapsed(TimeUnit.MILLISECONDS));
s.reset();

s.start();
for (int i = 0; i < runs; i++) {
p.matcher(search).matches();
}
System.out.println(s.elapsed(TimeUnit.MILLISECONDS));
s.reset();

s.start();
for (int i = 0; i < runs; i++) {
search.startsWith(start);
search.endsWith(end);
}
System.out.println(s.elapsed(TimeUnit.MILLISECONDS));
}

}

关于Java 字符串解析,什么更快?正则表达式或字符串方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19807253/

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