【发布时间】:2014-03-21 12:47:21
【问题描述】:
我无法根据字数频率解析给定的文本文件。除了根据字数排序之外,一切都在相应地发生。
我的方法
- 解析文本文件
- 将每个单词拆分并存储在字符串数组中
- 传递的数组将包含每个唯一单词的计数并传递给 Map
- Map 会根据 Value 对其进行排序
代码如下:
public class TestApp {
public static void main(String[] args) throws IOException {
String Line = null;
Map<String, Integer> finalMap = new HashMap<String, Integer>();
FileParser parser = new FileParser();
Reader fileReader = new FileReader("E:\\21350.txt");
BufferedReader bufferReader = new BufferedReader(fileReader);
while ((Line = bufferReader.readLine()) != null) {
String[] str = Line.split("\\s");
finalMap = parser.parseFile(str);
}
// new TestApp().showEntry(finalMap); // Before
parser.sortByValue(finalMap);
new TestApp().showEntry(finalMap); // After
bufferReader.close();
}
public void showEntry(Map<String, Integer> map) {
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + " --> " + entry.getValue());
}
}
}
public class FileParser {
Map<String, Integer> map = new HashMap<String, Integer>();
public Map<String, Integer> parseFile(String[] strArray) {
for (String key : strArray) {
int counter = 1;
if (map.containsKey(key))
map.put(key, map.get(key) + 1);
else
map.put(key, counter);
}
return map;
}
public Map<String, Integer> sortByValue(Map<String, Integer> map) {
List list = new LinkedList(map.entrySet());
Collections.sort(list, new Comparator() {
public int compare(Object o1, Object o2) {
int x = (Integer) ((Map.Entry) o1).getValue();
int y = (Integer) ((Map.Entry) o2).getValue();
if (x > y)
return -1;
else if (x < y)
return 1;
else
return 0;
}
});
Map<String, Integer> result = new LinkedHashMap<String, Integer>();
Iterator it = list.iterator();
while (it.hasNext()) {
Map.Entry<String, Integer> entry = (Map.Entry) it.next();
result.put(entry.getKey(), entry.getValue());
}
return result;
}
}
这段代码有什么问题?
【问题讨论】:
-
考虑为变量使用小写名称(即 line 而不是 Line)
-
考虑适当缩进,目前很难阅读。
-
您在每个循环转弯处替换您的
finalMap(在您的主方法的while中),您想要吗? -
@DaniloMuñoz:代码被您的编辑破坏了;比较器的一半不见了。
-
@DaniloMuñoz:不要使用
<code><pre>来格式化代码;当代码包含<时会感到困惑。而是选择代码并使用编辑器工具栏中的“代码”按钮。
标签: java sorting map comparator