0

文字列からパターンを出力しようとしています。

String stringToProcess = "Test Test Hello World Test Test";
String pattern = "Hello\\sWorld";
System.out.println(stringToProcess.substring(stringToProcess.indexOf(pattern), stringToProcess.lastIndexOf(pattern)));

このコードを実行すると、変更と修復の方法によっては、多くのエラーが発生するようです。上記のように、エラーが発生します。

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1

注意してください:私はすでにPattern.compile(regex, Pattern);これを行う方法を知っています。別の方法でやりたいと思います。

4

2 に答える 2

1

リクエストされた例は次のとおりです。

    String stringToProcess = "Test Test Hello World Test Test";
    String patternString = "Hello\\sWorld";
    Pattern pattern = Pattern.compile(patternString);
    Matcher matcher = pattern.matcher(stringToProcess);
    if (matcher.find()) {
        int start = matcher.start();
        int end = matcher.end();
        System.out.println(stringToProcess.substring(start, end));
    }

空白の代わりに本当に使用したかったため、 、 および Hello と World の間の他のすべての可能な単一空白文字\\sにも一致します。Hello\tWorldHello\nWorld

私が書いた方法では、最初に見つかった一致のみを出力します(一致する場合)。パターンにすべての一致を出力したい場合はifwhile.

しかしstart()、私end()は.substring()matcher.group()

于 2012-12-13T07:54:19.180 に答える
0

これは文の開始位置を返す関数です:

public  static int decodeString(String msg,String sentence) {
        Pattern p = Pattern.compile("(.*)"+sentence+"(.*)");
        Matcher m = p.matcher(msg);
        if (m.matches()) {
           return  m.end(1);
        }
        return -1;
    }

これにより、最後の一致が得られることに注意してください。いくつかの一致がある場合は、ループで作業する必要があります

于 2012-12-13T08:47:21.187 に答える