0

我正在使用 Java 的 Matcher 类来获取一些字符串,现在当我得到我的匹配项时,我还找到了它们的开始索引和结束索引。现在我要做的是获取x前面和后面的字符。

所以我所做的只是用{begin index minusx}{end index plusx}调用字符串上的 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”这样的正则表达式,这将匹配组

  1. C
  2.  
4

1 回答 1

0
String text = "Some 22 text with 44 characters";
Matcher matcher = Pattern.compile("(.{5})(\\d{2})(.{5})").matcher(text);

while (matcher.find()) {
    System.out.println(matcher.group(1) + " - " + matcher.group(2) + " - " + matcher.group(3));
}

输出 :

Some  - 22 -  text
with  - 44 -  char
于 2013-09-04T17:36:01.750 回答