如何在arraylist中搜索字符串

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

ArrayList  list = new ArrayList(); list.add("behold"); list.add("bend"); list.add("bet"); list.add("bear"); list.add("beat"); list.add("become"); list.add("begin"); 

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

  List  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  listClone = new ArrayList(); for (String string : list) { if(string.matches("(?i)(bea).*")){ listClone.add(string); } } System.out.println(listClone); 

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

 ArrayList resList = new ArrayList(); String searchString = "bea"; for (String curVal : list){ if (curVal.contains(searchString)){ resList.add(curVal); } } 

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

如今,Java 8允许单线function解决方案比公认的解决方案更清晰,更快速,更简单:

 List 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 matches = list.stream().filter(it -> it.contains("bea")).collect(Collectors.toList()); System.out.println(matches); // [bear, beat] 

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

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

  List  list = new ArrayList(); list.add("behold"); list.add("bend"); list.add("bet"); //Load the list into a hashSet Set set = new HashSet(list); if (set.contains("bend")) { System.out.println("String found!"); } 

更好的方法是在数组的每个String元素上使用matches()方法。 这将帮助您通过正则表达式搜索任何模式。

 import java.util.*; class ArrayLst { public static void main(String args[]) { ArrayList ar = new ArrayList(); ar.add("pulak"); ar.add("sangeeta"); ar.add("sumit"); System.out.println("Enter the name:"); Scanner scan=new Scanner(System.in); String st=scan.nextLine(); for(String lst: ar) { if(st.contains(lst)) { System.out.println(st+"is here!"); break; } else { System.out.println("OOps search can't find!"); break; } } } } 

我见过的最佳订单:

 // SearchList is your List // TEXT is your Search Text // SubList is your result ArrayList TempList = new ArrayList( (SearchList)); int temp = 0; int num = 0; ArrayList SubList = new ArrayList(); while (temp > -1) { temp = TempList.indexOf(new Object() { @Override public boolean equals(Object obj) { return obj.toString().startsWith(TEXT); } }); if (temp > -1) { SubList.add(SearchList.get(temp + num++)); TempList.remove(temp); } } 

首先,您必须从AdapterArrayList复制到tempsearchnewArrayList(将ListView项添加到tempsearchnewArrayList),因为那时您只能比较搜索文本是否出现在Arraylist中。

创建临时arraylist后,添加以下代码。

  searchEditTextBox.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { } @Override public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { String txt = charSequence.toString().trim(); int txtlength = txt.length(); if (txtlength > 0) { AdapterArrayList = new ArrayList>(); for (int j = 0; j< tempsearchnewArrayList.size(); j++) { if (tempsearchnewArrayList.get(j).get("type").toLowerCase().contains(txt)) { AdapterArrayList.add(tempsearchnewArrayList.get(j)); } } } else { AdapterArrayList = new ArrayList>(); AdapterArrayList.addAll(tempsearchnewArrayList); } adapter1.notifyDataSetChanged(); if (AdapterArrayList.size() > 0) { mainactivitylistview.setAdapter(adapter1); } else { mainactivitylistview.setAdapter(null); } } @Override public void afterTextChanged(Editable editable) { } }); 
 List  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  listClone = new ArrayList(); Pattern pattern = Pattern.compile("bea",Pattern.CASE_INSENSITIVE); //incase ur not concerned about upper/lower case for (String string : list) { if(pattern.matcher(string).find()) { listClone.add(string); continue; } } System.out.println(listClone);