标准Java API中是否有一个简短的手段允许我从一行中的字符串1^2^3^4
中获取一个令牌?我想说要提取的第3个元素“3”。我不想要任何编译正则表达式的东西。将它传入预编译的正则表达式是很好的,但每次调用方法时不断编译正则表达式都会损害CPU。
答案 0 :(得分: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 :(得分:1)
您可以使用Pattern.compile
在Java中编译正则表达式,这将生成Pattern
个对象。您可以根据需要随时重复使用该对象,而无需每次都重新编译正则表达式。只需将编译后的模式存储在变量中,这样您就可以在每次需要时检索它。
如果您定义的模式与^
之间的任意数字相匹配,则可以使用Pattern.matcher()
创建一个Matcher
对象,使您的模式与您的输入相匹配。 Matcher.group(int)
方法可让您访问给定输入中的特定匹配项。
答案 2 :(得分:1)
Scanner类允许您定义拆分器字符,因此您可以调用next()函数,直到找到所需的元素。在这种情况下,不需要使用正则表达式。
答案 3 :(得分:0)
我想如果您希望完全避免使用正则表达式来解决性能问题,可以尝试进行迭代处理的Apache Commons StringUtils split()。我没有对Java standard library one进行基准测试,但从源头上看,我很难想象显着的性能差异。