我正在使用 Java 的 Matcher 类来获取一些字符串,现在当我得到我的匹配项时,我还找到了它们的开始索引和结束索引。现在我要做的是获取x前面和后面的字符。
所以我所做的只是用{begin index minus
x}
到{end index plus
x}
调用字符串上的 substring 方法,但它似乎有点重,对于每场比赛,我都必须循环字符串以获得它的上下文。
我想知道是否有更好的方法来做到这一点。
这是我到目前为止所做的:困扰我的部分是text.substring
,它有多贵
String text = "Some 22 text with 44 characters";
Matcher matcher = Pattern.compile("\\d{2}").matcher(text);
int x = 5;
while (matcher.find()) {
String match = matcher.group();
int start = matcher.start();
int end = matcher.end();
String pretext = text.substring(start - x, start);
String postext = text.substring(end, end + x);
System.out.println(pretext + " - " + match + " - " + postext);
}
使用分组解决此问题的建议答案:使用regex (.{5})(\d{2}(.{5})
. 首先,这将无法捕获之前没有至少 5 个字符的字符。所以解决方案是(.{0,5})(\d{2})(.{0.5})
,对于那个简单的正则表达式非常好,(\d{2})
但是对于像“ c?at
”和给定文本“cat”这样的正则表达式,这将匹配组
- C
- 在