3

我正在尝试使用正则表达式(下面的测试代码)在字符串中查找多个匹配项的索引,以便与外部库一起使用。

static String content = "a {non} b {1} c {1}";
static String inline = "\\{[0-9]\\}";
public static void getMatchIndices()
{
    Pattern pattern = Pattern.compile(inline);
    Matcher matcher = pattern.matcher(content)
    while (matcher.find())
    {
        System.out.println(matcher.group());
        Integer i = content.indexOf(matcher.group());
        System.out.println(i);
    }
}

输出:

{1}
10
{1}
10

它找到两个组,但返回两个组的索引 10。有任何想法吗?

4

2 回答 2

2

来自http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/String.html#indexOf(java.lang.String ):

返回此字符串中第一次出现指定子字符串的索引。

由于两者都匹配相同的事物('{1}'),因此在两种情况下都会返回第一个匹配项。

您可能想使用Matcher#start()来确定比赛的开始。

于 2012-12-04T13:46:25.060 回答
0

你可以用正则表达式来做到这一点。下面将找到字符串中的位置。

static String content = "a {non} b {1} c {1}";
static String inline = "\\{[0-9]\\}";

public static void getMatchIndices()
{
    Pattern pattern = Pattern.compile(inline);
    Matcher matcher = pattern.matcher(content);

    int pos = 0;
    while (matcher.find(pos)) {
        int found = matcher.start();
        System.out.println(found);
        pos = found +1;
    }
}
于 2012-12-04T14:04:34.987 回答