让我说我有这个字符串
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());
}
但是显示最后一场比赛的最后一个索引。
答案 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());
}