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

时间:2013-03-08 12:28:44

标签: java regex find match

让我说我有这个字符串

String s ="stackjomvammssastackvmlmvlrstack"

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

我将如何做到这一点?

这是我到目前为止所做的事情

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

但是显示最后一场比赛的最后一个索引。

7 个答案:

答案 0 :(得分: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);

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

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

答案 1 :(得分:1)

试试这段代码:

if (m.find())
        System.out.println(m.end() - 1);

来自Matcher.end()的java doc:

Returns the offset after the last character matched. 

答案 2 :(得分:0)

如果我理解你的问题,那么你正试图找到“堆叠”的第一场比赛,然后得到最后一个索引....

您可以通过执行以下操作来完成此操作:

string toFind = "stack";
int firstOccurance = s.indexOf(toFind); (being s the word you posted above)
int whatYourLooking = firstOccurance + toFind.length() - 1; 

希望它有所帮助! ;)

答案 3 :(得分:0)

这样吗?

String s ="stackjomvammssastackvmlmvlrstack";
String word = "stack";
int index = s.indexOf(word) + word.length() - 1;

答案 4 :(得分:0)

final String input = "stackjomvammssastackvmlmvlrstack";
final String stack = "stack";
int start = input.indexOf(stack);
int end = start + stack.length() - 1;

答案 5 :(得分:0)

String s = "stackjomvammssastackvmlmvlrstack";

String stack =“stack”;         int index = s.indexOf(stack)+ stack.length();

答案 6 :(得分:-1)

我编辑了我之前的回答

  String s ="stackjomvammssastackvmlmvlrstack";      
  String pattern = "stack";

Matcher m = pattern.matcher(s);
int i=0;
while (m.find())
{    
    System.out.println(m.start());
    System.out.println(m.start()+m.length());
}