【发布时间】:2013-10-16 17:19:29
【问题描述】:
第一次发帖。
首先我知道如何使用模式匹配器和字符串拆分。 我的问题是哪个最适合我在我的示例中使用,为什么? 或提供更好的替代方案的建议。
任务: 我需要在未知字符串中的两个已知正则表达式之间提取未知名词。
我的解决方案: 获取名词的开头和结尾(来自 Regexp 1&2)和子字符串以提取名词。
String line = "unknownXoooXNOUNXccccccXunknown";
int goal = 12 ;
String regexp1 = "Xo+X";
String regexp2 = "Xc+X";
- 我需要在第一个正则表达式之后定位索引位置。
- 我需要在第二个正则表达式之前找到索引位置。
A) 我可以使用模式匹配器
Pattern p = Pattern.compile(regexp1);
Matcher m = p.matcher(line);
if (m.find()) {
int afterRegex1 = m.end();
} else {
throw new IllegalArgumentException();
//TODO Exception Management;
}
B) 我可以使用字符串拆分
String[] split = line.split(regex1,2);
if (split.length != 2) {
throw new UnsupportedOperationException();
//TODO Exception Management;
}
int afterRegex1 = line.indexOf(split[1]);
我应该使用哪种方法,为什么? 我不知道哪个在时间和内存上更有效。 两者都足够接近我自己的可读性。
【问题讨论】:
-
为什么不将所有内容组合成一个正则表达式,然后使用匹配组提取名词?
-
Matcher.groupCount();不计算出现次数!所以这不是String.split()的替代品。 -
@Holger 是正确的。您应该使用
Pattern.split()或循环计算m.find()返回true 的次数。 -
请注意,
UnsupportedOperationException在这里没有意义;这是典型的IllegalArgumentException。 -
@maaartinus 谢谢我做了你的改变,这就是我有
//TODO Exception Management;的原因我需要了解更多关于正确用法的信息。
标签: java regex string performance split