我在Java中有一个这样的字符串数组。
new String[] { "A", "AAD", "AC", "B" };
我想搜索类似的模式starts with 'A'
并在数组中返回匹配数组中所有项目的结果。我知道这可以通过迭代数组并对每个元素进行模式搜索来完成。
但是有没有任何有效的方法来实现同样的目标?
谢谢。
我在Java中有一个这样的字符串数组。
new String[] { "A", "AAD", "AC", "B" };
我想搜索类似的模式starts with 'A'
并在数组中返回匹配数组中所有项目的结果。我知道这可以通过迭代数组并对每个元素进行模式搜索来完成。
但是有没有任何有效的方法来实现同样的目标?
谢谢。
您可以通过不进行肯定不匹配的检查来添加一些索引以节省时间。例如,您可以为"A"
、等创建 26 个索引列表"B"
,"C"
其中字符列表x
包含至少包含一个 的字符串的所有索引x
。
当被要求搜索模式时,您可以检查所有字母并选择索引数量最少的索引并仅扫描该索引。
这个方案可以做得更复杂,例如为每对或三组字符存储一个索引列表。根据您需要搜索的字符串数量,加速可能会很大。
当然,主要假设是字符串列表是固定的,有很多元素,并且您需要进行多次搜索。
这使用 josql 从集合中查询
使用此查询“SELECT * FROM java.lang.String where toString $LIKE 'A%'”
例子:
List<String> names=new ArrayList<String>();
String[] n={"Burke", "Connor", "Frank", "Everett", "Albert", "George", "Harris", "David" };
Collections.addAll(names, n);
Query q=new Query();
q.parse("SELECT * FROM java.lang.String where toString $LIKE 'A%'");
List<String> results=(List<String>)q.execute(names).getResults();
for(String name:results) {
System.out.println(name);
}
为什么不尝试谓词?(来自谷歌番石榴)
这里已经有关于如何使用谓词的解释: Java中的谓词
但基本上它在列表上创建了一种抽象迭代,通过创建具有所需条件的谓词,充当过滤器,您实际上并没有遍历它,谓词完成了繁重的工作。
试试这个。
String [] strarray = new String[] { "A", "AAD", "AC", "B" };
ArrayList<String> resultsList = new ArrayList<String>();
Pattern pattern = Pattern.compile("The pattern U want to search for");
for (String string : strarray) {
Matcher matcher = pattern.matcher(string);
if (matcher.find()) {
resultsList.add(string);
}
}