如何在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);