如何在arraylist中搜索字符串

Rom*_*omi 26 java regex search arraylist

我想在arraylist中搜索一个字符串.我的ArrayList包含:

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");
Run Code Online (Sandbox Code Playgroud)

现在我想搜索"bea"它,它应该返回一个包含"bear"和的列表"beat".我该如何实现它?

Abh*_*hek 25

 List <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");

           List <String> listClone = new ArrayList<String>(); 
           for (String string : list) {
               if(string.matches("(?i)(bea).*")){
                   listClone.add(string);
               }
           }
        System.out.println(listClone);
Run Code Online (Sandbox Code Playgroud)

  • 只是你必须改变正则表达式,假设你想要匹配 smal 'b' 和大写的 'B' ,然后重新匹配 "(bea).*" &lt;=&gt; "(b|B)(ea).*"。 (2认同)

Udo*_*eld 19

遍历您的列表并执行包含或开始.

ArrayList<String> resList = new ArrayList<String>();
String searchString = "bea";

for (String curVal : list){
  if (curVal.contains(searchString)){
    resList.add(curVal);
  }
}
Run Code Online (Sandbox Code Playgroud)

您可以将其包装在方法中.包含检查它是否在列表中.你也可以去开始.


seb*_*kem 12

如今,Java 8允许一个单行的功能解决方案,它比公认的解决方案更清晰,更快速,更简单:

List<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");

    List<String> matches = list.stream().filter(it -> it.contains("bea")).collect(Collectors.toList());

    System.out.println(matches); // [bear, beat]
Run Code Online (Sandbox Code Playgroud)

  • Stream 需要 Android Api 级别 &gt; 24。 (2认同)

NPE*_*NPE 8

由于您的列表似乎没有排序,您必须迭代其元素.应用startsWith()contains()应用于每个元素,并将匹配项存储在辅助列表中.完成后返回辅助列表.


Mar*_*uez 6

使用java.util.HashSet可能更容易.例如:

  List <String> list = new ArrayList<String>(); 
  list.add("behold");
  list.add("bend");
  list.add("bet");

  //Load the list into a hashSet
  Set<String> set = new HashSet<String>(list);
  if (set.contains("bend"))
  {
    System.out.println("String found!");
  }
Run Code Online (Sandbox Code Playgroud)