Подсчитать количество вхождений ключевых слов в список Array

1
public static void main(String[] args) {
    ArrayList<String> list = new ArrayList<String>();
    String s = "nope";
    String v = "nopenopes";
    list.add(s);
    list.add(v);
    keywordCount(list, "nope"); 

}
public static int keywordCount(ArrayList<String> str , String keyword){
    int count = 0;

    for (int i = 0;i<str.size();i++){
    while ((i= str.indexOf(keyword,i)) != -1) { // here is where I found the error
          count++;
          i += keyword.length();    
}}

    System.out.println(count);
    return count;
}

Привет, я пишу фрагмент кода, который учитывает появление определенного ключевого слова внутри списка массивов. Он работал для строки строки, но не пытался при попытке сделать то же самое для arraylist. Может кто-то, пожалуйста, указать, что я сделал неправильно, и помочь мне исправить это. Заранее спасибо.

  • 0
    Скажите, пожалуйста, используйте, какой результат вы ожидаете и каков фактический результат.
  • 0
    вы ожидаете здесь вывод как 2? или вы ожидаете 1?
Показать ещё 3 комментария
Теги:
arraylist

4 ответа

4
Лучший ответ

Вы можете подать в суд на Collections.frequncy()

 List<String> list=new ArrayList<>();
 list.add("a");
 list.add("b");
 list.add("a");
 System.out.println(Collections.frequency(list,"a")); // out put is 2

Скажем, у вас есть List<String> list тогда вы хотите найти число keyword вхождения

затем

int numOfOccurrences= Collections.frequency(list,keyword)
2

Легко вы можете использовать метод contains();

public static int keywordCount(ArrayList<String> str , String keyword){
    int count = 0;

    for (int i = 0; i<str.size();i++){
        if(str.get(i).contains(keyword)) 
          count++;
    }
}
0

используйте код ниже.

public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
        list.add("a");
        list.add("b");
        list.add("a");

        // get all Unique keywords 
        Set<String> set = new HashSet<String>(list);
        for(String keyword: set){
            System.out.println(keyword + ": " + Collections.frequency(list, keyword));
        }
    }

Вывод:

b: 1
a: 2
0

Вы можете использовать Arrays.asList() для создания своего List.

public static void main(String[] args) {
  System.out.println(keywordCount(Arrays.asList("nope", "nopenopes"), "nope"));
}

public static int keywordCount(List<String> al, String keyword) {
  int count = 0;
  for (String str : al) {
    int i = 0;
    while ((i = str.indexOf(keyword, i)) != -1) {
      count++;
      i += keyword.length();
    }
  }
  return count;
}

Когда я запускаю выше, я получаю вывод

3

Одна из проблем в вашем коде была

i = str.indexOf(keyword,i)

В вашем столбце str не является String, это ArrayList.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню