Подсчет вхождений строк в ArrayList в Java - Обработка

1

Привет, поскольку он в настоящее время использует обработку и обучение Java, мой код по существу работает через ArrayList и находит слово, которое больше всего встречается и выводит его на консоль, мой код ниже:

import java.util.Arrays;

ArrayList<String> words = new ArrayList();


int[] occurrence = new int[2000];
void setup() {
size(800,480);
smooth();

String[] data = loadStrings("data/data.txt"); 
    Arrays.sort(data);

for (int i = 0; i < data.length; i ++ ) {
   words.add(data[i]); 
   words.add(data[j]);   //Put each word into the words ArrayList
   }
for(int i =0; i<data.length; i++) {
    occurrence[i] =0;
    for(int j=i+1; j<data.length; j++) {
   if(data[i].equals(data[j])) {
     occurrence[i] = occurrence[i]+1;
   }
 }
}
int max = 0;
String most_talked ="";
   for(int i =0;i<data.length;i++) {
if(occurrence[i]>max) {
  max = occurrence[i];
  most_talked = data[i];
 }
 }

println("The most talked keyword is " + most_talked + " occuring " + max + " times.");

Мне интересно, как я собираюсь изменить его, чтобы добавить второе наиболее распространенное слово и т.д. И т.д.

Я изучил использование карты, а также collection.sort, но не могу понять, как двигаться дальше. Я новичок в java, поэтому все было бы полезно.

Теги:
processing

2 ответа

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

Кажется, что Multisets из библиотеки Guava были бы идеальны для этой работы. Вы можете сохранить все слова, которые вы прочитали, в Multiset и когда вы хотите получить вхождения (количество), вы можете просто перебрать копию, возвращенную Multisets.copyHighestCountFirst(myMultiset):

import com.google.common.collect.*;
...

// data contains the words from the text file
Multiset<String> myMultiset = ImmutableMultiset.copyOf(data);

for (String word : Multisets.copyHighestCountFirst(myMultiset).elementSet()) {
    System.out.println(word + ": " + myMultiset.count(word));
}

Это должно сделать это.

  • 0
    Знаете ли вы, как я импортирую использование мультимножеств?
  • 0
    Я добавил оператор импорта, но, что более важно, вам нужно скачать библиотеку Guava (используйте ссылку "guava-18.0.jar") и поместить ее в путь к классам.
Показать ещё 3 комментария
1

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

Если это соответствует увеличению счетчика для этого слова (если их слишком много, вы также можете добавить int [] для хранения вхождений), а затем просто отобразить его (каждый aux [index] с помощью Occurrence [index]).

Example: (Only a scheme)
If the list is:

Tom Tom Dog fish

Then:

Aux[0] = Tom;
Aux[1] = Dog;
Aux[3] = fish;

и вхождения для каждого находятся в "int list": для Tom index = 0, dog = 1 и fish = 3.

Надеюсь, это поможет вам!

  • 0
    Дело в том, что я вытаскиваю слова из файла .txt с 1000+ в нем, если я собираюсь использовать hashmap для этого?
  • 0
    Ну, я тоже новичок здесь и пытаюсь помочь как можно больше. Я бы сделал это так, как я сказал вам. Если вас беспокоит размер «words_used_array», вы можете указать значение по умолчанию в качестве размера, а затем, если он переполнится, создать его копию с большей емкостью. Извините, я не мог сделать это лучше.
Показать ещё 1 комментарий

Ещё вопросы

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