Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用bufferedreader和treemap打印文本中最常用的单词JAVA_Java_Arrays_String_Bufferedreader_Treemap - Fatal编程技术网

如何使用bufferedreader和treemap打印文本中最常用的单词JAVA

如何使用bufferedreader和treemap打印文本中最常用的单词JAVA,java,arrays,string,bufferedreader,treemap,Java,Arrays,String,Bufferedreader,Treemap,文本将只包含空格和单词 样本输入: thanks for the help \n the car works now \n thanks \n 输出: 因为它的字典比“谢谢”小 公共类主{ 公共静态void main(字符串[]args)引发IOException{ 弦线; 字符串[]字=新字符串[100]; Mapfrequency=newhashmap(); BufferedReader reader=新的BufferedReader(新的InputStrea

文本将只包含空格和单词

样本输入:

thanks for the help \n
the car works now   \n
thanks              \n
输出: 因为它的字典比“谢谢”小

公共类主{
公共静态void main(字符串[]args)引发IOException{
弦线;
字符串[]字=新字符串[100];
Mapfrequency=newhashmap<>();
BufferedReader reader=新的BufferedReader(新的InputStreamReader(System.in));
而((line=reader.readLine())!=null){
line=line.trim();
如果(!line.isEmpty()){
文字=行。拆分(\\W+);
for(字符串字:字){
字符串处理=word.toLowerCase();
已处理=已处理。替换(“,”,”);
if(频率容器(已处理)){
频率。输入(已处理,
频率。获取(处理)+1);
}否则{
频率。put(已处理,1);
}
}
}
}
int most频繁使用=0;
字符串theWord=null;
for(字符串字:frequency.keySet()){
整数theVal=频率.get(word);
如果(Val>最常用的值){
最常使用的=VAL;
单词=单词;
}else if(theVal==most经常使用和&word.length()<
theWord.length(){
单词=单词;
最常使用的=VAL;
}
}
System.out.printf(theWord);
}
}

我有一次考试不及格,我真的不知道为什么我需要另一种方法。

在你问题的标题中,你提到了树形图,但实际上你没有使用它

如果将实例化地图的行替换为

         NavigableMap < String, Integer > frequency = new TreeMap < > ();
NavigableMapfrequency=newtreemap<>();
然后,可以使用对映射的单个查询替换for循环:

System.out.println(frequency.lastEntry().key)


您可以阅读此处的文档:

您能提供一个您尝试过的代码示例吗?我已经添加了我的解决方案,也许我可以找到另一种方法…@GeorgeChetan,请格式化您的代码并使其更完善readable@HarshalParekh对不起……但如果我有这样的输入:“谢谢你的车谢谢你”。输出将是“car”,因为它比“谢谢”小。如果“car”看起来比“谢谢”少,这没关系。所以基本上,如果我有更多的单词出现不止一次,我必须显示最小的频繁单词。我可以在代码中修改什么?你说得对。我的解决方案解决不了你的问题。我接电话时漏掉了什么。在你最初的问题中,你说你错了一个例子。你知道那是什么吗?清除文本中的逗号,可能还需要清除其他字符,如
?(谈论这段代码:
已处理。替换(“,”);
)我真的不知道,我的解决方案五分之一都不通过测试。它告诉我文本将只包含英文字母表中的空格、小写和大写字母。我发现了问题。似乎如果我的单词是“谢谢”,它将打印我“谢谢”。我可以添加什么来解决此问题?如果我的单词以大写字母开头,我需要保持这种方式。
toLowerCase
将大写字符改为小写。所以“谢谢”变成了“谢谢”。删除包含
word.toLowerCase()
的行可以解决这个问题,但这也意味着“谢谢”和“谢谢”将被视为不同的单词。这里没有对错,这取决于你想做什么。。。
         NavigableMap < String, Integer > frequency = new TreeMap < > ();