import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.io.*;
//import java.util.*;
public class TestClass {
public static void main(String[] args) throws Exception {
// 源字符串
// Map hashMap = null;
BufferedReader infile = null;
//StringTokenizer st = null;
String filename = "c:\\1.txt";
String sourceStr;
String f = null;
//打开一篇文章,名字是 1.txt
infile = new BufferedReader(new FileReader(filename));
while ((sourceStr= infile.readLine()) != null) {
f += sourceStr; //都出整篇文章,存入String中。
}
// hashMap = new HashMap();
// 分割字符串
String[] strs = f.split(";| |,");
// 用户记录字符出现次数的Map对象
Map<String, Integer> countMap = new HashMap<String, Integer>();
// 循环记录每个字符串出现的次数
for (String str : strs) {
str = str.trim(); //应该要去掉左右边的空格, 否则统计出现不正确
countMap.put(str, countMap.containsKey(str) ? countMap.get(str) + 1 : 1); // 如果存在,就获得当前值,然后+1放入map;不存在,放入1
}
// 打印出各字符出现的次数
for (Entry<String, Integer> entry : countMap.entrySet()) {
System.out.println("字符串:" + entry.getKey() + " 出现次数:" + entry.getValue());
}
}
}
我的1.txt内容为:it is it is it si si si si si big big big sit sit you
输出结果的时候老是有一个null还有空格的统计
字符串:sit 出现次数:2
结果如下:
字符串: 出现次数:2
字符串:is 出现次数:2
字符串:it 出现次数:3
字符串:you 出现次数:1
字符串:big 出现次数:3
字符串:null 出现次数:1
字符串:si 出现次数:5
------解决方案--------------------
你的f=null
下边直接f+=了 就是f=null+it......
所以f=nullit is it is it si si si si si big big big sit sit you
------解决方案--------------------
String f = null;
改成
String f = "";
------解决方案--------------------
BufferedReader读文件的时候,一定要保证文件结尾是一个回车符,否则可能出现挂机等待。
------解决方案--------------------
是因为你的1.txt中有连续两个空格,用空格分隔时,会有一个分隔成str。
- Java code
import java.util.HashMap;import java.util.Map;import java.util.Map.Entry;import java.io.*;public class TestClass { public static void main(String[] args) throws Exception { // 源字符串 BufferedReader infile = null; String filename = "c:\\1.txt"; String sourceStr; String f = ""; // 打开一篇文章,名字是 1.txt infile = new BufferedReader(new FileReader(filename)); while ((sourceStr = infile.readLine()) != null) { f += sourceStr; // 都出整篇文章,存入String中。 } // 分割字符串 String[] strs = f.split(";| |,"); // 用户记录字符出现次数的Map对象 Map<String, Integer> countMap = new HashMap<String, Integer>(); // 循环记录每个字符串出现的次数 for (String str : strs) { str = str.trim(); // 应该要去掉左右边的空格, 否则统计出现不正确 if(str.length()==0){continue;} countMap.put(str, countMap.containsKey(str) ? countMap.get(str) + 1 : 1); // 如果存在,就获得当前值,然后+1放入map;不存在,放入1 } // 打印出各字符出现的次数 for (Entry<String, Integer> entry : countMap.entrySet()) { System.out.println("字符串:" + entry.getKey() + " 出现次数:" + entry.getValue()); } }}