Наиболее часто встречающееся слово в данной строке

#java

#java

Вопрос:

Я пытаюсь найти наиболее часто встречающееся слово в данной строке. Мой подход заключается в правильной работе, когда я напрямую беру массив string, но когда я беру String и преобразую его в массив 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 в этот раз я не получаю правильный вывод, который является hi.

Комментарии:

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

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

Ответ №1:

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

 String str=sc.next();
 

Который считывает только первый токен в строке, т.Е. ‘Hey’ . Вместо этого вы должны использовать.`

 String str=sc.nextLine();
 

Комментарии:

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