标准Java API中有没有一个简短的手段,它允许我从1行中的字符串1^2^3^4
中获取令牌?我想说第三个元素“3”被提取。我不想要编译正则表达式的任何东西。让它在预编译的正则表达式中传递是没问题的,但每次调用方法时都会不断编译正则表达式会伤害CPU。字符串在java中分割/标记化而不编译正则表达式?
0
A
回答
3
您可以使用预编译的Pattern轻松拆分;
static Pattern regex = Pattern.compile("\\^");
private static String getEntry(String input, int which)
{
return regex.split(input)[which];
}
...或者交替,只是做直线代码,而不是使用正则表达式可言,因为它不会产生非所需的String对象,它应该会更快。
private static String getEntry(String input, int which)
{
int left, right = -1;
do {
left = right;
right = input.indexOf('^', right+1);
}
while(which-- > 0 && right >= 0);
if(which != -1)
return null;
if(right == -1)
return input.substring(left+1);
return input.substring(left+1, right);
}
1
您可以使用Pattern.compile
编译Java中的正则表达式,这将产生一个Pattern
对象。您可以随意重复使用该对象,而无需再次编译正则表达式。只需将编译后的模式存储在变量中,以便每次需要时都可以检索它。
如果您定义的模式匹配^
之间的任意数字,则可以使用Pattern.matcher()
创建一个与您的输入相匹配的Matcher
对象。 Matcher.group(int)
方法会让您访问给定输入中的特定匹配项。
0
我想如果您希望避免正常表达式完全针对感知的性能问题,您可以尝试Apache Commons StringUtils split(),它可以进行迭代处理。我没有将它与Java standard library one进行比较,但是看到源头我很难想象显着的性能差异。
1
有Scanner类可以让你定义一个分离器字符,所以你可以调用next()函数,直到找到你想要的元素。在这种情况下,不需要使用正则表达式。
相关问题
- 1. 正则表达式分割字符串中的标记
- 2. 正则表达式分割字符串
- 3. 正则表达式分割字符串
- 4. 正则表达式分割字符串
- 5. 正则表达式分割字符串
- 6. 在Java中使用正则表达式分割字符串
- 7. 使用正则表达式在java中分割字符串
- 8. 在java中使用正则表达式分割字符串
- 9. 在java中使用正则表达式的分割字符串
- 10. Java字符串分割正则表达式保留定界符
- 11. 正则表达式分割字符串不包括连字符
- 12. Java正则表达式,分割字符串在标点符号除括号外
- 13. 正则表达式打破由字符串分割字符串
- 14. 使用正则表达式分割Java字符串
- 15. Java正则表达式来分割字符串与int,双打
- 16. Java使用和分割字符串使用正则表达式
- 17. java的正则表达式分割字符串
- 18. Java扩展字符串分割正则表达式括号
- 19. Java的正则表达式尝试了分割字符串
- 20. 使用自定义正则表达式分割字符串java
- 21. 正则表达式切割字符串
- 22. Java正则表达式使用不同的分隔符分割字符串
- 23. 分割字符串在C#中使用正则表达式
- 24. 在Python中使用正则表达式分割字符串
- 25. 在Go中使用正则表达式分割字符串
- 26. 分割字符串在C#中使用正则表达式
- 27. 在python中使用正则表达式分割字符串
- 28. 正则表达式在JavaScript中分割一个html字符串?
- 29. 用正则表达式在javascript中分割字符串?
- 30. 使用正则表达式在JavaScript中分割字符串
你的意思是你不想使用String.split(),因为它必须使用一种模式? – 2013-04-06 10:38:47
你能展示一些代码吗?我知道这就是你要求的,但是你完全确定CPU有损害,你不仅仅是过早地优化了吗? – Gothmog 2013-04-06 10:51:21
@Gothmog是的。最后一次使用Java 1.5或1.6进行检查时,编译器不会对其进行优化(即:编译模式并将其替换为引用)。我假设情况仍然如此。使用hprof,我已经看到了一些简单的方法,就像一个方法中的正则表达式占用了很大一部分cpu计算时间。 – Zombies 2013-04-06 11:13:56