Я пытаюсь найти слово с наибольшим количеством вхождений в данной строке. Мой подход состоит в том, чтобы работать правильно, когда я напрямую беру массив строк, но когда я беру 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.
Но когда я ввожу как строку и разделяю ее на массив строк, в этот раз я не получаю правильный вывод, который является привет.
Чтобы расширить то, что предлагает @JohnnyMopp, документация для метода Scanner.next() гласит: Находит и возвращает следующий полный токен из этого сканера. Таким образом, используя next(), вы извлекаете только первое слово. nextLine(), с другой стороны, возвращает ввод String, введенный пользователем.




Я выполнил ваш код, ваша логика верна, но есть единственная ошибка при использовании
String str=sc.next();
Который читает только первый токен в строке, то есть «Эй». Вместо этого вы должны использовать.
String str=sc.nextLine();
Спасибо, @JohnyMoop и Zepher. теперь мой код работает нормально.
Попробуйте
String str=sc.nextLine();