在 java 数组列表中搜索正则表达式

2022-09-03 04:27:03
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"); 

有一种方法可以搜索正则表达式bea.*并获取索引,就像ArrayList.indexOf ?

编辑:返回项目很好,但我需要比线性搜索更高性能的东西


答案 1

赫姆斯掌握了正确的基础知识。如果你想要字符串而不是索引,那么你可以通过使用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
}

答案 2

是否有内置方法?我不知道。但是,自己做应该很容易。以下是一些完全未经测试的代码,应该可以为您提供基本的想法:

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

我可能对Pattern和ListIterator部分的用法有点错误(我也从未使用过),但这应该给出基本的想法。您还可以在迭代器上执行简单的 for 循环,而不是 while 循环。