在Java字符串数组中搜索模式

3

我有一个Java字符串数组,就像这样。

new String[] { "A", "AAD", "AC", "B" };

我想搜索像以'A'开头的模式,并将所有匹配的结果返回到一个数组中。我知道可以通过迭代数组并在每个元素上执行模式搜索来实现。

但是否有更有效的方法来实现相同的功能呢?

谢谢。


2
不遍历数组?我真的很怀疑。 - Luiggi Mendoza
1
你的程序中是否存在可衡量、可见、有意义的性能问题,还是只是纯粹假设? - Patashu
5个回答

1
你可以编写 SQL 或 X-Path 表达式来代替迭代集合 - 可以选择像 JoSQLq-LinkjXpath 这样的库。 JoSQL
String[] strs = new String[] { "A", "AAD", "AC", "B" };;
List<String> stringList = Arrays.asList(strs);
String query = "SELECT * FROM java.util.String str where value Like 'A%'";

实际上,库会以优化的方式迭代您的集合。

1
很酷,我不知道这个 :) - LPD

1

这里使用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);
}

1
你可以添加某种索引来节省时间,不进行肯定不匹配的检查。例如,您可以为“A”,“B”,“C”等创建26个索引列表,其中字符“x”的列表包含至少包含一个“x”的字符串的所有索引。
在搜索模式时,您可以检查所有字母并选择具有最小数量的索引的索引,仅扫描该索引。
这个方案可以更加复杂,例如存储每对或三元字符的索引列表。根据您需要搜索的字符串数,速度提升可能会非常大。
当然,主要假设是字符串列表固定,具有许多元素,并且您需要进行许多搜索。

0

试试这个。

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

0
为什么不尝试一下谓词?(来自Google Guava)
这里已经有了如何使用谓词的解释: Java中的谓词 但基本上,它通过创建具有所需条件的谓词来在列表上创建一种抽象迭代,并充当过滤器,您实际上不需要迭代它,谓词会处理繁重的工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接