我有一个String例如
String value1 = "12345 abc 123 def 123";
和另一个要搜索的人
String value2 ="123";
例如,。
如何返回第一个字符串出现在第一个字符串上的所有索引?根据我搜索的内容,indexOf
和lastIndexOf
在字符串中搜索指定字符串的第一个和最后一个索引。
答案 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)
使用Pattern
和Matcher
试用正则表达式。
然后,您可以使用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;)。