本帖最后由 linhui 于 2016-9-19 13:46 编辑
题目是:一个文本中存放着某高校的学生名单,每一行一个名字,姓与名之间用空格隔开。现在需要统计所有姓氏在文本中出现的次数。
我的解决方法是:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeMap;
public class TestCount {
public static void main(String[] args) {
TreeMap<String, Integer> map = new TreeMap<>();
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(new File("d:/name.txt")));
String value = null; // 临时接收文件中的字符串变量
StringBuffer buffer = new StringBuffer();
flag: while ((value = br.readLine()) != null) { // 开始读取文件中的字符
char[] c = value.toCharArray();
for (int i = 0; i < c.length; i++) {
if (c != ' ') {
buffer.append(String.valueOf(c));
} else {
// System.out.println(buffer);
if (map.containsKey(buffer.toString())) {
int conut = map.get(buffer.toString());
map.put(buffer.toString(), conut + 1);
} else {
map.put(buffer.toString(), 1);
}
buffer.delete(0, buffer.length());
continue flag;
}
}
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Set<Map.Entry<String, Integer>> set = map.entrySet();
Iterator<Map.Entry<String, Integer>> it = set.iterator();
while (it.hasNext()) {
Map.Entry<String, Integer> end = (Entry<String, Integer>) it.next();
System.out.println(end);
}
}
}
我测试的文本文件内容如下:
张 三
李 四
王 五
赵 六
陈 七
张 三
欧阳 十
张 三
李 四
王 五
张 五
赵 六
陈 七
张 八
欧阳 十
但是会出现一个问题,就是第一行的那个“张”,和下面的重复出现的 ”张“ 不一样,这到底是啥原因导致的?
这是我控制台输出的结果:
张=4
李=2
欧阳=2
王=2
赵=2
陈=2
张=1 |
|