做了一题,感觉还可以,和大家分享一下,涉及的点挺多的,另外在计算次数时。特别要注意指针的改变,不然很容易出错
package com.itheima;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Properties;
/**
* 7、 统计一个文本文件中字符出现的次数,结果存入另外的一个文本文件中。例如:
a: 21 次
b: 15 次
c: 15 次
把: 7 次
当: 9 次
前: 3 次
,:30 次
* */
public class Test7 {
/**
* @param args
*/
Properties p;
public static void main(String[] args)throws IOException
{
//将制定的文本文件加载到字符串缓冲区中
File file = new File("D:\\JAVA实例练习","myTest.txt");
BufferedReader bfr = new BufferedReader(new FileReader(file));
String s = null;
StringBuffer sb =new StringBuffer();
while((s=bfr.readLine())!=null)
{
sb.append(s);
}
bfr.close();
Properties properties = getTimes(sb);//调用方法计算出出现的次数,并返回记录其的集合。
writeProperties(properties);//调用方法将属性写入文本中
}
public static Properties getTimes(StringBuffer s)throws IOException
{
Properties p =new Properties();
for (int i =0;i<s.length();i++)
{
int count =1;//定义计数器
char ch =s.charAt(i);
for(int j =i+1;j<s.length();j++)
{
if(s.charAt(j)==ch)//判断如果后面有出现该字符,计数器加一,并删掉该字符
{
count++;
s.deleteCharAt(j);
j=j-1;//由于删除了 一个元素,此时要将指针j减一用来耦合删除的元素
}
}
p.setProperty(Character.toString(ch), Integer.toString(count));//将结果存入集合
}
return p;
}
public static void writeProperties(Properties p)throws IOException
{
BufferedWriter bfw = new BufferedWriter(new FileWriter(new File("D:\\JAVA实例练习","result.txt")));
Enumeration<?> e =p.propertyNames();
while(e.hasMoreElements())//将结果写出
{
Object obj=e.nextElement();
String s =(String)obj;
String sb = p.getProperty(s);
bfw.write(s+":"+sb+"次");
bfw.newLine();
}
bfw.close();
}
}
|
|