Как искать строку в массиве - PullRequest
26 голосов
/ 19 ноября 2011

Я хочу найти строку в массиве. Мой 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");

Теперь я хочу найти "bea", и он должен вернуть список, содержащий "bear" и "beat". Как я могу это реализовать?

Ответы [ 10 ]

25 голосов
/ 19 ноября 2011
 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);
18 голосов
/ 19 ноября 2011

Прокрутите список и выполните поиск или начните с него.

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

for (String curVal : list){
  if (curVal.contains(searchString)){
    resList.add(curVal);
  }
}

Вы можете заключить это в метод. Содержит проверки, если его в списке. Вы также можете начать с.

12 голосов
/ 26 августа 2016

В настоящее время 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]
8 голосов
/ 19 ноября 2011

Поскольку ваш список не выглядит отсортированным, вы должны перебирать его элементы.Примените startsWith() или contains() к каждому элементу и сохраните совпадения во вспомогательном списке.Верните вспомогательный список, когда закончите.

6 голосов
/ 11 июля 2015

Может быть проще, используя 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!");
  }
2 голосов
/ 19 ноября 2011

Лучше использовать метод match () для каждого элемента String массива.Это поможет вам найти любой шаблон с помощью регулярных выражений.

0 голосов
/ 16 марта 2017
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>(); 
           Pattern pattern = Pattern.compile("bea",Pattern.CASE_INSENSITIVE); //incase u r not concerned about upper/lower case
           for (String string : list) {
               if(pattern.matcher(string).find()) {
                   listClone.add(string);
                   continue;
               }
           }
        System.out.println(listClone);
0 голосов
/ 16 декабря 2016

Сначала вам нужно скопировать, из AdapterArrayList в tempsearchnewArrayList (добавить элементы ListView в tempsearchnewArrayList), потому что тогда только вы можете сравнить, отображается ли искомый текст в 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<HashMap<String, String>>();
                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<HashMap<String, String>>();
                AdapterArrayList.addAll(tempsearchnewArrayList);
            }
            adapter1.notifyDataSetChanged();
            if (AdapterArrayList.size() > 0) {
                mainactivitylistview.setAdapter(adapter1);
            } else {
                mainactivitylistview.setAdapter(null);
            }

        }
        @Override
        public void afterTextChanged(Editable editable) {

        }
    });
0 голосов
/ 23 июля 2014

Лучший заказ, который я видел:

// SearchList is your List  
// TEXT is your Search Text
// SubList is your result

                    ArrayList<String> TempList = new ArrayList<String>(
                            (SearchList));
                    int temp = 0;
                    int num = 0;
                    ArrayList<String> SubList = new ArrayList<String>();
                    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);
                        }
                    }
0 голосов
/ 12 мая 2014
import java.util.*;
class ArrayLst
{
    public static void main(String args[])
    {
        ArrayList<String> ar = new ArrayList<String>();
        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;
}
}
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...