kmi*_*ilo 15 java regex search arraylist
ArrayList <String> list = new ArrayList();
list.add("behold");
list.add("bend");
list.add("bet");
list.add("bear");
list.add("beat");
list.add("become");
list.add("begin");
Run Code Online (Sandbox Code Playgroud)
有一种方法可以搜索regexp bea.*并获取像ArrayList.indexOf这样的索引吗?
编辑:返回项目很好但我需要比线性搜索更高性能的东西
DJC*_*rth 16
赫姆斯掌握了基础知识.如果你想要字符串而不是索引,那么你可以通过使用Java 5 foreach循环来改进:
import java.util.regex.Pattern;
import java.util.ListIterator;
import java.util.ArrayList;
/**
* Finds the index of all entries in the list that matches the regex
* @param list The list of strings to check
* @param regex The regular expression to use
* @return list containing the indexes of all matching entries
*/
List<String> getMatchingStrings(List<String> list, String regex) {
ArrayList<String> matches = new ArrayList<String>();
Pattern p = Pattern.compile(regex);
for (String s:list) {
if (p.matcher(s).matches()) {
matches.add(s);
}
}
return matches
}
Run Code Online (Sandbox Code Playgroud)
有内置方法吗?从来没听说过.但是,它应该很容易自己做.这里有一些完全未经测试的代码,可以为您提供基本的想法:
import java.util.regex.Pattern;
import java.util.ListIterator;
import java.util.ArrayList;
/**
* Finds the index of all entries in the list that matches the regex
* @param list The list of strings to check
* @param regex The regular expression to use
* @return list containing the indexes of all matching entries
*/
List<Integer> getMatchingIndexes(List<String> list, String regex) {
ListIterator<String> li = list.listIterator();
List<Integer> indexes = new ArrayList<Integer>();
while(li.hasNext()) {
int i = li.nextIndex();
String next = li.next();
if(Pattern.matches(regex, next)) {
indexes.add(i);
}
}
return indexes;
}
Run Code Online (Sandbox Code Playgroud)
我可能会使用Pattern和ListIterator部分有点不对(我从未使用过),但这应该给出基本的想法.您还可以在迭代器上执行简单的for循环而不是while循环.