Java 显示文本中最常用的单词
我有一个问题,我已经面对了两天了。 给我一个文本,它跨越几行,我必须显示文本中最常用的单词,但例如常用单词在其他单词中出现的次数相同,以显示字典最小值。 这是我的代码:Java 显示文本中最常用的单词,java,algorithm,hashmap,bufferedreader,Java,Algorithm,Hashmap,Bufferedreader,我有一个问题,我已经面对了两天了。 给我一个文本,它跨越几行,我必须显示文本中最常用的单词,但例如常用单词在其他单词中出现的次数相同,以显示字典最小值。 这是我的代码: import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.LinkedHashMap; import java.u
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedHashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
Map < String, Integer > map = new LinkedHashMap < String, Integer > ();
BufferedReader reader = null;
try {
reader = new BufferedReader(new InputStreamReader(System.in));
String currentLine = reader.readLine();
while (currentLine != null) {
String[] input = currentLine.replaceAll("[^a-zA-Z]", " ").toLowerCase().split(" ");
for (int i = 0; i < input.length; i++) {
if (map.containsKey(input[i])) {
int count = map.get(input[i]);
map.put(input[i], count + 1);
} else {
map.put(input[i], 1);
}
}
currentLine = reader.readLine();
}
String mostRepeatedWord = null;
int count = 0;
for (Map.Entry < String, Integer > m: map.entrySet()) {
if (m.getValue() > count) {
mostRepeatedWord = m.getKey();
count = m.getValue();
}
}
System.out.println(mostRepeatedWord);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
导入java.io.BufferedReader;
导入java.io.FileReader;
导入java.io.IOException;
导入java.io.InputStreamReader;
导入java.util.LinkedHashMap;
导入java.util.Map;
公共班机{
公共静态void main(字符串[]args){
MapMap=newlinkedhashmap();
BufferedReader reader=null;
试一试{
reader=新的BufferedReader(新的InputStreamReader(System.in));
字符串currentLine=reader.readLine();
while(currentLine!=null){
String[]input=currentLine.replaceAll(“[^a-zA-Z]”),toLowerCase().split(“”);
for(int i=0;im:Map.entrySet()){
if(m.getValue()>计数){
mostrepectedword=m.getKey();
count=m.getValue();
}
}
System.out.println(大多数重复字);
}捕获(IOE异常){
e、 printStackTrace();
}最后{
试一试{
reader.close();
}捕获(IOE异常){
e、 printStackTrace();
}
}
}
我的问题是,如何找到字典最小值?Java中的比较遵循一个起初有点棘手的标准-字典比较也不例外,但一旦您了解了它是如何进行的,就有了对它的支持,这使得比较容易 我建议在最后的for循环中,如果计数相等,则将当前单词与
mostRepeatedWord
进行比较,如果较小(位于前面),则将其存储到mostRepeatedWord
中。对于词典比较,请使用m.getKey().compareTo(mostRepeatedWord)
(或m.getKey().comparetogignorecase>)(mostRepeatedWord)
如果您想在比较中忽略大小写之间的差异。如果m.getKey()
按字典顺序排在mostRepeatedWord
之前(小于它),则该方法将返回一个负数(任何严格小于0的数字,不指定哪个为负数)
这样,在循环mostrepectedword
之后,保存出现频率最高(在地图中具有最高计数)的词汇表中最小的单词
如果你想知道我是否会为你写代码,不,你会通过自己写代码学到更多。如果你遇到麻烦,一定要在评论中跟进,不过,我会回答
compareTo
方法的文档说明:
返回:
如果参数字符串等于此字符串,则值为0;值
如果此字符串在词典编纂上小于字符串,则小于0
参数;如果此字符串为
按字典顺序大于字符串参数
链接
- 当此对象小于、等于或大于指定对象时,指定
返回负整数、零或正整数的约定compareTo()