在Java字符串数组中搜索模式
我在Java中有这样一个字符串数组在Java字符串数组中搜索模式,java,arrays,pattern-matching,Java,Arrays,Pattern Matching,我在Java中有这样一个字符串数组 new String[] { "A", "AAD", "AC", "B" }; 我想搜索一个模式,比如以“a”开头,然后返回数组中匹配的所有项目的结果。我知道这可以通过迭代数组和对每个元素进行模式搜索来实现 但是有没有有效的方法来实现同样的目标 谢谢。您可以添加一些索引,以节省时间,方法是不进行无法确定匹配的检查。例如,您可以为“A”、“B”、“C”等创建26个索引列表,其中字符x的列表包含至少包含一个x的字符串的所有索引 当被要求搜索一个模式时,你可以检查
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(名称);
}
是否不遍历数组?我真的很怀疑。你的程序中是否存在可测量的、可见的、有意义的性能问题,或者你说的是假设性的问题?酷。。我不知道:)