0

假设我有这个字符串

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

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

4

7 回答 7

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);
}
于 2013-03-08T12:34:38.930 回答
1

试试这个代码:

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

来自 Matcher.end() 的 java 文档:

Returns the offset after the last character matched. 
于 2013-03-08T12:43:03.490 回答
0

如果我理解你的问题是正确的,你正在尝试找到“堆栈”的第一个匹配项,然后获取最后一个索引......

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

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

希望能帮助到你!;)

于 2013-03-08T12:35:32.563 回答
0

这边走?

String s ="stackjomvammssastackvmlmvlrstack";
String word = "stack";
int index = s.indexOf(word) + word.length() - 1;
于 2013-03-08T12:35:47.240 回答
0
final String input = "stackjomvammssastackvmlmvlrstack";
final String stack = "stack";
int start = input.indexOf(stack);
int end = start + stack.length() - 1;
于 2013-03-08T12:36:14.323 回答
0
String s = "stackjomvammssastackvmlmvlrstack";

字符串栈 = "栈"; int index = s.indexOf(stack) + stack.length();

于 2013-03-08T12:36:54.560 回答
-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());
}
于 2013-03-08T12:34:24.007 回答