标准 Java API 中是否存在允许我从1^2^3^4
1 行中的字符串中获取令牌的简写?我想说要提取的第三个元素“3”。我不想要任何编译正则表达式的东西。将它传递到预编译的正则表达式中很好,但是每次调用方法时都不断地编译正则表达式会伤害 CPU。
问问题
2051 次
4 回答
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);
}
于 2013-04-06T10:48:13.223 回答
1
您可以使用 Java 编译正则表达式Pattern.compile
,这将产生一个Pattern
对象。您可以根据需要多次重复使用该对象,而不必每次都重新编译正则表达式。只需将编译后的模式存储在一个变量中,这样您就可以在每次需要时检索它。
如果您定义一个匹配 之间任意数字的模式^
,您可以Matcher
使用Pattern.matcher()
. 该Matcher.group(int)
方法将使您可以访问给定输入中的特定匹配项。
于 2013-04-06T10:45:55.740 回答
1
有一个 Scanner 类可以让你定义一个分隔符,这样你就可以调用 next() 函数,直到找到你想要的元素。在这种情况下不需要使用正则表达式。
于 2013-04-06T17:59:02.230 回答
0
我想如果您希望完全避免使用正则表达式来解决性能问题,您可以尝试使用Apache Commons StringUtils split()进行迭代处理。我没有将它与Java 标准库 one进行基准测试,但是查看源代码我很难想象会有显着的性能差异。
于 2013-04-06T10:46:03.543 回答