String - 搜索所有指定字符串的索引

时间:2014-07-10 10:09:19

标签: java regex string

我有一个String例如

String value1 = "12345 abc 123 def 123";

和另一个要搜索的人

String value2 ="123";
例如,

如何返回第一个字符串出现在第一个字符串上的所有索引?根据我搜索的内容,indexOflastIndexOf在字符串中搜索指定字符串的第一个和最后一个索引。

5 个答案:

答案 0 :(得分:6)

使用indexOf的可选参数。

List<Integer> indexes = new ArrayList<>();
for (int idx = haystack.indexOf(needle);
     idx != -1;
     idx = haystack.indexOf(needle, idx + 1)) {
  indexes.add(idx);
}

答案 1 :(得分:3)

答案 2 :(得分:3)

使用正则表达式更好

class Test {
    public static void main(String[] args) {
        String value1= "12345 abc 123 def 123";
        Pattern pattern = Pattern.compile("123");
        Matcher  matcher = pattern.matcher(value1);

        int count = 0;
        while (matcher.find()){
            count++;
}

        System.out.println(count);   
    }
}

答案 3 :(得分:2)

使用PatternMatcher试用正则表达式。 然后,您可以使用matcher.start()获取开始索引,使用matcher.end()获取结束索引(不包括)。

String value1 = "12345 abc 123 def 123";
String value2 = "123";
Pattern pattern = Pattern.compile(value2);
Matcher matcher = pattern.matcher(value1);

while (matcher.find()){
    System.out.println("Start: " + matcher.start() + " -- End: " + matcher.end());
}

这将为您提供输出:

Start: 0 -- End: 3
Start: 10 -- End: 13
Start: 18 -- End: 21

答案 4 :(得分:1)

您需要自己实现此功能。你可以使用类似的东西:

package com.example.stringutils;
import java.util.ArrayList;

public class Util {
/** Return a list of all the indexes of the 'key' string that occur in the 
 * 'arbitrary' string. If there are none an empty list is returned.
 * 
 * @param key
 * @param arbitrary
 * @return
 */
    private static ArrayList<Integer> allIndexesOf(String key, String arbitrary) {
        ArrayList<Integer> result = new ArrayList<Integer>();
        if (key == null |  key.length() == 0 | arbitrary == null | arbitrary.length()<key.length()) {
            return result;
        }

        int loc = -1;
        while ((loc = arbitrary.indexOf(key, loc+1)) > -1) {
            result.add(loc);
        }
        return result;
    }
}

你可能想看看正则表达式实际上是否表现得更快(代码行更少,总是更快,更简单&#34;代码&#34;)。