Вхождение слова в строку (количество слов) - PullRequest
0 голосов
/ 20 декабря 2009

Я застрял при написании вхождения слова в строку. Я получил несколько советов (в примечаниях к задачам), чтобы использовать это CompareToIgnoreCase. поэтому я попробовал что-то вроде этого:

splitwords = StringCont.split("\\s");
for(int i=0; i<splitwords.length; i++)
{
    if(splitwords[1].compareToIgnoreCase(splitwords[i]) == 0)
        splitcount++;
}

Это, конечно, только то, что я могу сделать, и, вероятно, плохой путь. Когда я запускаю код, я иногда освобождаюсь от массива, а иногда он запускается. Чего не хватает: просмотрите все слова, проверьте их и пропустите слова, которые уже были подсчитаны. Я буду счастлив получить любую помощь с этим, так что я могу двигаться дальше и понять, как это может быть закодировано. Спасибо:)

Редактировать: Кажется, я недостаточно четко объяснил проблему, но получаю хороший ответ об объекте карты, который легко собирает то, что мне нужно. Я не знал о карте. Так что да, я пытался определить, сколько раз каждое данное слово встречается в строке.

tangens: это должно означать - взять первое слово (где первый пробел) - splitwords [1] и сравнить его со всеми другими словами в строковых splitwords [i], и если оно равно 0 (равно), то считать ++.

Эско: действительно есть пробелы, как в предложении. Но я все еще получил это исключение. Я не знаю, почему через.

Ответы [ 4 ]

3 голосов
/ 21 декабря 2009

Сохраните слова и их количество в Map.

String[] words = string.toLowerCase().split("\\s+");
Map<String, Integer> wordCounts = new HashMap<String, Integer>();

for (String word : words) {
    Integer count = wordCounts.get(word);
    if (count == null) {
        count = 0;
    }
    wordCounts.put(word, count + 1);
}

Обратите внимание, что я звонил toLowerCase() до split(), поскольку вы, похоже, хотите иметь регистронезависимость.

0 голосов
/ 20 декабря 2009

Вы можете использовать Набор и сохранять каждое слово в конце и получать размер набора.

Вы получите число различных слов , конечно, не число слов .

0 голосов
/ 20 декабря 2009

Если вы хотите посчитать вхождение слова, вы должны использовать HashMap<String, Integer>. Там вы можете хранить счетчик для каждого найденного слова.

0 голосов
/ 20 декабря 2009

Вы ищете вхождение определенного слова в предложении или общее количество слов во всех словах в предложении? Исходя из вашего примера кода, я ожидал бы первого, но ваше объяснение заставляет меня думать о последнем.

В любом случае, что-то очевидное: если во входной строке нет пробелов, String#split() возвращает массив, содержащий ровно один элемент - саму исходную строку. Поскольку индексы массива начинаются с нуля, то splitwords[1] вызывает ArrayIndexOutOfBoundsException, поскольку единственная доступная строка находится в индексе [0].

...