Самое частое слово в данной строке

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

Я использовал HashMap для этой проблемы.

import java.util.*;


    public class FindingmostOccurrencewordsinGivenString {
        static String OccurreneceofWords(String [] arr)
        {
            HashMap<String,Integer> hs=new HashMap<String,Integer>();

            for(int i=0;i<arr.length;i++)
            {
                if (hs.containsKey(arr[i]))

                hs.put(arr[i],  hs.get(arr[i])+1);
                else

                    hs.put(arr[i], 1);

            }

            Set<Map.Entry<String, Integer>>set=hs.entrySet();
            Integer value=0;
            String key = "";
             for(Map.Entry<String, Integer>m:set) 
            {
                if (m.getValue() > value)
                {
                    value=m.getValue();
                    key=m.getKey();
                }
            }
             return key;
        }

        public static void main(String[]args)
        {
            Scanner sc=new Scanner(System.in);
            String str=sc.next();
            String str1[]=str.split("\\s+");
             String arr[] = {  "hey","hi","hi","hello","hi" };//hi
            System.out.println(OccurreneceofWords(str1));




        }
    }

Ожидаемый результат: hi

Он печатает true, когда

String arr[] = {  "hey","hi","hi","hello","hi" };//hi as input.

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

Попробуйте String str=sc.nextLine();

Johnny Mopp 14.04.2019 13:56

Чтобы расширить то, что предлагает @JohnnyMopp, документация для метода Scanner.next() гласит: Находит и возвращает следующий полный токен из этого сканера. Таким образом, используя next(), вы извлекаете только первое слово. nextLine(), с другой стороны, возвращает ввод String, введенный пользователем.

Zephyr 14.04.2019 14:02
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я выполнил ваш код, ваша логика верна, но есть единственная ошибка при использовании

String str=sc.next();

Который читает только первый токен в строке, то есть «Эй». Вместо этого вы должны использовать.

String str=sc.nextLine();

Спасибо, @JohnyMoop и Zepher. теперь мой код работает нормально.

VISHAL SHARMA 15.04.2019 14:56

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