java读取txt文件,并统计每行中每个字母出现的次数,并将产生的数字保存到一个新的txt文件中(有加分) 15
要读取的txt文件的内容全部都是一条一条的英文字母组成的字符串,如图所示:统计每一条字符串中每个字母出现的次数,每一条英文字符最后会产生一条数字数据,保存到新的txt文件...
要读取的txt文件的内容全部都是一条一条的英文字母组成的字符串,如图所示:统计每一条字符串中每个字母出现的次数,每一条英文字符最后会产生一条数字数据,保存到新的txt文件中,要具体的代码现实过程。
展开
2个回答
展开全部
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
/**
* 统计一部小说中文字数量
*
*/
public class Demo10 {
static int count = 0;
public static void main(String[] args)throws IOException{
String file = "src/javase2/day03/demo.txt";
Map<Character, Integer> map = count(file);
List<Entry<Character, Integer>> entrys =
new ArrayList<Entry<Character,Integer>>(map.entrySet());
Collections.sort(entrys,
new Comparator<Entry<Character, Integer>>() {
public int compare(Entry<Character, Integer> o1,
Entry<Character, Integer> o2) {
return -(o1.getValue() - o2.getValue());
}
});
int all = map.size();
System.out.println("不重复字符数量:"+ all);
System.out.println("总字符数量:"+ count);
for(int i=0; i<10; i++){
Entry<Character, Integer> entry = entrys.get(i);
char c = entry.getKey();
int val = entry.getValue();
System.out.println(c+":"+val+","+(val*100.0/count)+"%");
}
}
public static Map<Character, Integer> count(String file)
throws IOException {
InputStreamReader in =
new InputStreamReader(
new BufferedInputStream(
new FileInputStream(file)),"GBK");
Map<Character, Integer> map =
new HashMap<Character, Integer>();
Set<Character> ignoreChars = new HashSet<Character>();
//ignoreChars 忽略的字符
ignoreChars.add('\n');
ignoreChars.add('\r');
ignoreChars.add(',');
ignoreChars.add('。');
ignoreChars.add(' ');
ignoreChars.add(' ');//...
int c;
while((c = in.read())!=-1){
char ch = (char)c;
if(ignoreChars.contains(ch)){
continue;
}
count++;
Integer val = map.get(ch);
map.put(ch, val == null ? 1 : val+1);
}
in.close();
return map;
}
}
翻了一下以前的案例,给你找到了 你可以试试
下面的这个是一个IO 的工具类
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.io.RandomAccessFile;
import javax.imageio.stream.FileImageInputStream;
/**
* IO 工具类
*/
public class IOUtils {
public static Object deepCopy(Object obj) {
try {
ByteArrayOutputStream buf =
new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(buf);
oos.writeObject(obj);// 将对象序列化到byte数组流中
oos.close();
byte[] ary = buf.toByteArray();
ObjectInputStream ois = new ObjectInputStream(
new ByteArrayInputStream(ary));
Object o = ois.readObject();// 从byte数组流中反序列化对象
ois.close();
return o;
} catch (Exception e) {// 异常捕获再抛出, 将异常转换为运行时异常
throw new RuntimeException(e);
}
}
/**
* 复制文件功能: 将文件src复制为dst
* 只能复制文件! 不支持文件夹的复制!
* @param src 源文件
* @param dst 目标文件
*/
public static void cp(String src, String dst){
try {
InputStream in = new FileInputStream(src);
OutputStream out = new FileOutputStream(dst);
byte[] buf = new byte[10*1024];
int count;
while((count=in.read(buf))!=-1){
//System.out.println(count);
out.write(buf, 0, count);
}
//System.out.println("结束了:"+count);
in.close();
out.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public static void cp2(String src, String dst){
try {
InputStream in = new FileInputStream(src);
OutputStream out = new FileOutputStream(dst);
int b;
while((b=in.read())!=-1){
out.write(b);
}
in.close();
out.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
/**
* 实现将文件读取到一个byte数组
*/
public static byte[] read2(String filename){
try{
InputStream in = new FileInputStream(filename);
byte[] buf = new byte[in.available()];
in.read(buf);
in.close();
return buf;
}catch(IOException e){
throw new RuntimeException(e);
}
}
public static void print(File file){
try{
RandomAccessFile raf = new RandomAccessFile(file, "r");
int b; int i=1;
while((b=raf.read())!=-1){
if(b<=0xf)
System.out.print("0");
System.out.print(Integer.toHexString(b)+" ");
if(i++%16 == 0){
System.out.println();
}
}
System.out.println();
raf.close();
}catch(IOException e){
e.printStackTrace();
throw new RuntimeException(e);
}
}
public static void print(byte[] buf){
int i=1;
for(int b : buf){
b = b & 0xff;
if(b<=0xf)
System.out.print("0");
System.out.print(Integer.toHexString(b)+" ");
if(i++%16 == 0){
System.out.println();
}
}
System.out.println();
}
/**
* 将小文件 一次性 读取到 byte数组中返回
* @param file 文件名
* @return 全部文件内容
*/
public static byte[] read(String file){
try {
RandomAccessFile raf = new RandomAccessFile(file, "r");
byte[] buf = new byte[(int)raf.length()];
raf.read(buf);
raf.close();
return buf;
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
public static byte[] read(File file){
try {
RandomAccessFile raf = new RandomAccessFile(file, "r");
byte[] buf = new byte[(int)raf.length()];
raf.read(buf);
raf.close();
return buf;
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
/**
* 在控制台上按照16进制格式输出文件的内容
* 每16个byte为一行
* @param file 文件名
* @throws RuntimeException 如果文件读取失败,跑出异常
*/
public static void print(String file){//IOUtils.java
try{
RandomAccessFile raf=
new RandomAccessFile(file, "r");
int b; int i=1;
while((b=raf.read())!=-1){
if(b<=0xf){ System.out.print('0'); }
System.out.print(Integer.toHexString(b)+" ");
if(i++%16==0){ System.out.println(); }
}
System.out.println();
raf.close();
}catch(IOException e){
throw new RuntimeException(e);
}
}
}
2013-05-18
展开全部
逐行读,逐个字母判断,用Map统计。
更多追问追答
追问
给个具体的代码实现过程吧
追答
简单、快捷的
import java.io.*;
import java.util.*;
class StringCountOfFile{
public static void main(String argv[])throws Exception{
File fileSrc=new File("StringCountOfFile.java");
if(!fileSrc.exists()){
throw new Exception("目录不存在");
}
BufferedReader fin=new BufferedReader( new FileReader(fileSrc) );
String line;
Map counter= new HashMap();
while( (line=fin.readLine())!=null){
int len = line.length();
for(int i=0; i='0' && c='A' && c='a' && c it=counter.keySet().iterator(); it.hasNext(); ){
char key=it.next();
int count=counter.get(key);
System.out.println(key+" --- "+count);
}
}
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询