Вопрос

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

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

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

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

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

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

Это было полезно?

Решение

Храните слова и их количество в 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() поскольку вы, похоже, хотите использовать нечувствительность к регистру.

Другие советы

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top