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));
    }

因为您真的想使用\\s而不是空白,所以它也将匹配Hello 和 World 之间的所有其他可能的单个空白字符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 回答