在字符串中查找正则表达式模式

时间:2012-12-13 07:47:10

标签: java string

我正在尝试从字符串中打印出一个模式。

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);这样做的方法。我想以不同的方式做到这一点。

2 个答案:

答案 0 :(得分: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\tWorldHello\nWorld以及Hello和World之间所有其他可能的单个空白字符。

我写它的方式只打印第一个找到的匹配(如果有的话),如果你想打印所有匹配到你的模式,用if替换while

但如果我不需要,我不会使用start()end()substring(),如果你想打印你的比赛,你可以打印matcher.group()

答案 1 :(得分: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;
    }

请注意,这会给出最后一次匹配。如果我们有一些匹配,我们需要使用循环