以下是JAVA中三种方式实现文件字符统计
package com.lyc.gui;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
/**
- 统计一个文件countCharNum2.txt中各个字母出现次数,
- 显示格式:A(8),B(16),C(10)…,a(12),b(10),c(3)…中(5),国(6),
- 括号内代表字符出现次数countCharNum2.txt:AAaaaBBBBbbbCccDDDddddEefFF中国中国中国中中中国
- @author JLB
*/
public class Demo03
{
public static void main(String[] args) throws IOException
{
FileReader fr = new FileReader("F:\\培训\\课程\\2018-12-14\\作业\\ss.txt");
HashMap<Object,Integer> map = new HashMap<Object,Integer>();
//Set<Integer> set = new HashSet<Integer>();
int i;
int a=1;
while( (i = fr.read()) !=-1 )
{
char ss = (char)i;
if(map.containsKey(ss))
{
int s = map.get(ss);
s++;
map.put(ss, s);
}
else
{
map.put(ss, a);
}
}
Set set = map.keySet();
Iterator<Object> it = set.iterator();
while(it.hasNext())
{
Object str = it.next();
System.out.println(str+":出现了:"+map.get(str));
}
}
}
=============================================================================
package com.lyc.gui;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
/**
- 统计一个文件countCharNum2.txt中各个字母出现次数,
- 显示格式:A(8),B(16),C(10)…,a(12),b(10),c(3)…中(5),国(6),
- 括号内代表字符出现次数countCharNum2.txt:AAaaaBBBBbbbCccDDDddddEefFF中国中国中国中中中国
- @author JLB
*/
public class Homework6 {
public static void main(String[] args) {
try {
FileReader fileReader = new FileReader("countCharNum.txt");
int num = 0;
int index = 0;
int count = 0;
char char1 = '0';
char char2 = '0';
Map<Integer,Character> map = new HashMap<Integer,Character>();
Set<Character> str1 = new HashSet<Character>();
while((num=fileReader.read()) != -1){
++index;
map.put(index, (char)num);
str1.add((char)num);
}
Iterator<Character> it = str1.iterator();
while(it.hasNext()){
char1=it.next();
for (int i = 1; i <= map.size(); i++) {
char2 = map.get(i);
if(char1==char2){
count++;
}
}
System.out.print(char1+"("+count+")");
count=0;
}
fileReader.close();
} catch (FileNotFoundException e) {
System.out.println("文件不存在!");
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
}
}
package com.lyc.gui;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;
public class Test6 {
/**
* 统计一个文件countCharNum2.txt(见附件)中各个字母出现次数:
* A(8),B(16),C(10)…,a(12),b(10),c(3)…中(5),国(6),
* 括号内代表字符出现次数;
*
* 程序分析:
* 1.这出现中文字符,依然只能用字符流来读取文件
* 2.不能保存相同的主键值,可以使用HashMap:key-value来实现
* 3.先获得该key的value,如果存在key的话value的值加1
* */
public static void main(String[] args) {
// 文件路径
File file = new File(“F:\java\countCharNum2.txt”);
// 创建集合HashMap类存放要保存的key-value
HashMap<String, Integer> map = new HashMap<>();
try {
// 创建字符流
InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "GBK"); //可以设置读取编码
// FileReader fr = new FileReader(file); //只能读取utf8编码
// 每次读取的字符编码值
int len = 0;
while ((len = isr.read()) != -1) {
// 获取对应的字符
char c = (char) len;
String key = c+"";
System.out.println(len+"----"+key);
// 如果有它的key值对应的value值要加1
if(map.get(key)==null){
map.put(key, 1);
}else{
map.put(key, map.get(key)+1);
}
}
// 读完后把结果打印出来
Iterator<Entry<String, Integer>> iterator = map.entrySet().iterator();
//迭代器的使用
while (iterator.hasNext()) {
Entry<String, Integer> entry = iterator.next();
System.out.print(entry.getKey() + "(" + entry.getValue()+ ") \t");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
=============================================================================