在Java中查找第一个匹配项的最后一个索引

srh*_*snl 0 java regex find match

可以说我有这个字符串

String s ="stackjomvammssastackvmlmvlrstack"
Run Code Online (Sandbox Code Playgroud)

我想找到子串"stack"的第一个匹配的最后一个索引,在我的例子中是(index =)4.

我该怎么做?

这是我到目前为止所做的

    Matcher m = pattern.matcher(s);
    int i=0;
    while (m.find())
    {    
        System.out.println(m.start());
        System.out.println(m.end());
    }
Run Code Online (Sandbox Code Playgroud)

但是它显示了最后一场比赛的最后一个索引.

ass*_*ias 6

您可以简单地找到单词的位置并添加其长度:

String s = "stackjomvammssastackvmlmvlrstack";
String match = "stack";
int start = s.indexOf(match);
int end = (start + match.length() - 1);
System.out.println(match + " found at index " + start);
System.out.println("Index of last character of first match is " + end);
Run Code Online (Sandbox Code Playgroud)

如果你需要使用正则表达式,你的代码接近解决方案 - 你可以这样做:

String s = "stackjomvammssastackvmlmvlrstack";
String match = "s.*?k";
Matcher m = Pattern.compile(match).matcher(s);
if (m.find()) {
    System.out.println(m.end() - 1);
}
Run Code Online (Sandbox Code Playgroud)