#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. теперь мой код работает нормально.