Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java字符串数组中搜索模式_Java_Arrays_Pattern Matching - Fatal编程技术网

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

在Java字符串数组中搜索模式,java,arrays,pattern-matching,Java,Arrays,Pattern Matching,我在Java中有这样一个字符串数组 new String[] { "A", "AAD", "AC", "B" }; 我想搜索一个模式,比如以“a”开头,然后返回数组中匹配的所有项目的结果。我知道这可以通过迭代数组和对每个元素进行模式搜索来实现 但是有没有有效的方法来实现同样的目标 谢谢。您可以添加一些索引,以节省时间,方法是不进行无法确定匹配的检查。例如,您可以为“A”、“B”、“C”等创建26个索引列表,其中字符x的列表包含至少包含一个x的字符串的所有索引 当被要求搜索一个模式时,你可以检查

我在Java中有这样一个字符串数组

new String[] { "A", "AAD", "AC", "B" };
我想搜索一个模式,比如
以“a”开头,然后返回数组中匹配的所有项目的结果。我知道这可以通过迭代数组和对每个元素进行模式搜索来实现

但是有没有有效的方法来实现同样的目标


谢谢。

您可以添加一些索引,以节省时间,方法是不进行无法确定匹配的检查。例如,您可以为
“A”
“B”
“C”
等创建26个索引列表,其中字符
x
的列表包含至少包含一个
x
的字符串的所有索引

当被要求搜索一个模式时,你可以检查所有的字母,选择标记数最少的索引,然后只扫描它

该方案可以变得更加复杂,例如为每对或三组字符存储索引列表。根据搜索所需字符串的数量,加速比可能很大


当然,主要的假设是字符串列表是固定的,有许多元素,并且您需要进行许多搜索。

您可以编写sql或x-path表达式,而不是在集合上迭代-可以选择类库或

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%'";
String[]strs=新字符串[]{“A”、“AAD”、“AC”、“B”};;
List stringList=Arrays.asList(strs);
String query=“从java.util.String str中选择*,其中的值类似于'A%'”;
库实际上以优化的方式在您的集合上迭代。

为什么不试试谓词呢?(来自谷歌Guava)

这里已经有了关于如何使用谓词的说明:

但基本上,它在列表上创建了一种抽象的迭代,通过创建一个具有所需条件的谓词,它充当一个过滤器,你实际上不需要对它进行迭代,谓词完成了繁重的工作。

试试这个

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);
                }
            }
String[]strarray=新字符串[]{“A”、“AAD”、“AC”、“B”};
ArrayList resultsList=新建ArrayList();
Pattern=Pattern.compile(“您要搜索的模式”);
用于(字符串:strarray){
Matcher-Matcher=pattern.Matcher(字符串);
if(matcher.find()){
resultsList.add(字符串);
}
}

这将使用josql从集合中查询

使用此查询“SELECT*FROM java.lang.String where to字符串$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);
}
List name=new ArrayList();
字符串[]n={“伯克”、“康纳”、“弗兰克”、“埃弗里特”、“阿尔伯特”、“乔治”、“哈里斯”、“大卫”};
集合。addAll(名称,n);
查询q=新查询();
q、 解析(“SELECT*FROM java.lang.String,其中toString$LIKE'A%'”;
List results=(List)q.execute(names).getResults();
用于(字符串名称:结果){
System.out.println(名称);
}

是否不遍历数组?我真的很怀疑。你的程序中是否存在可测量的、可见的、有意义的性能问题,或者你说的是假设性的问题?酷。。我不知道:)