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 に答える