java读取文本中字母后计算的问题

我想写一个java的程序,能读取文本文件中的字母(按char)一个一个的读入,然后记录每个字母出现的次数,计算出现的百分比,之后把结果写入另外一个文本文件,以以下格式:b... 我想写一个java的程序,能读取文本文件中的字母(按char)一个一个的读入,然后记录每个字母出现的次数,计算出现的百分比,之后把结果写入另外一个文本文件,以以下格式:
b 25.2% 23
f 5.832% 7
a 3.21% 3
。。。。。
排序的方式由小到大出现。
我本来是用
int i = 0
while ( i != -1 ) { i = fr.read(); }
在这个while的循环中加入26个 if statement,对当前字母进行对比,如果成功,会让count_a, count_b这类的指数+1来记录出现的次数最后运算。
但是我是新手,不太了解的就是, 在while循环中,i是integer,可以用它来复制当前读取的字母(char)么? 第二就是在while循环中 fr.read()代表当前读入的字母,比如第一次循环式第一个,那么第二次循环fr.read()是自动就开始代表第二个了?还是需要我做些比如count++在while循环中才能让它去读第二个?

java新手刚刚接触比较小白请大家见谅。
如果能给出整个程序那就太好了~~谢谢大家帮忙~!
展开
 我来答
小小的盗贼
2010-01-30 · TA获得超过155个赞
知道答主
回答量:52
采纳率:0%
帮助的人:97.9万
展开全部
【结果】:
字母总数:535
a有40个,占7.4766355140186915%
b有5个,占0.9345794392523364%
c有35个,占6.542056074766355%
d有9个,占1.6822429906542056%
e有62个,占11.588785046728972%
f有11个,占2.05607476635514%
g有6个,占1.1214953271028036%
h有4个,占0.7476635514018691%
i有52个,占9.719626168224298%
j有6个,占1.1214953271028036%
k有5个,占0.9345794392523364%
l有22个,占4.11214953271028%
m有13个,占2.4299065420560746%
n有32个,占5.981308411214953%
o有28个,占5.233644859813084%
p有27个,占5.046728971962617%
r有48个,占8.97196261682243%
s有22个,占4.11214953271028%
t有65个,占12.149532710280374%
u有10个,占1.8691588785046729%
v有7个,占1.308411214953271%
w有14个,占2.616822429906542%
x有7个,占1.308411214953271%
y有5个,占0.9345794392523364%
【代码】:
package LineAll;
import java.io.File;
import java.io.FileReader;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.FileNotFoundException;
public class Exam_letter {
private void HandleLetter(File file)throws IOException,FileNotFoundException{
if(file.length()>0){
int[] iNum=new int[26];
FileReader fr=new FileReader(file);
BufferedReader br=new BufferedReader(fr);
int i,count=0;
while((i=br.read())!=-1){
i-='a';
if(i>-1&&i<26) iNum[i]++;
}
br.close(); fr.close();
for(i=0;i<26;i++) count+=iNum[i];//总字母
System.out.println("字母总数:"+count);
for(i=0;i<26;i++){//打印
if(iNum[i]!=0)
System.out.println((char)(i+(int)'a')+"有"+iNum[i]+"个,占"+(iNum[i]*100/(double)count)+"%");
}
}
else System.out.println("文件不存在或者无数据,请确认文件!");
}
public static void main(String[] args)throws IOException,FileNotFoundException{
Exam_letter le=new Exam_letter();
File file=new File("e:\\java.txt");
le.HandleLetter(file);
}
}
匿名用户
2010-01-25
展开全部
int count[]=new int[26];
int i=0;
while((i=fr.read())!=-1){
i-='a';
if(i<26&&i>=0)
count[i]++;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
daodiba3
2010-01-25 · TA获得超过588个赞
知道小有建树答主
回答量:1236
采纳率:0%
帮助的人:469万
展开全部
如果没有字符读取了 那值便是-1 这个while(i != -1) 只要不是没东西读了 就继续执行
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
非情林q
2010-01-25 · TA获得超过987个赞
知道小有建树答主
回答量:1157
采纳率:100%
帮助的人:974万
展开全部
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class CanElim {

public static void main(String[] args) throws FileNotFoundException,
IOException {

File f = new File("input.txt");
FileReader fr = new FileReader(f);
BufferedReader br = new BufferedReader(fr);

int enom = br.read();
int i = 0;
int countA = 0;
int countB = 0;
int countC = 0;
int countD = 0;
int countE = 0;
int countF = 0;
int countG = 0;
int countH = 0;
int countI = 0;
int countJ = 0;
int countK = 0;
int countL = 0;
int countM = 0;
int countN = 0;
int countO = 0;
int countP = 0;
int countQ = 0;
int countR = 0;
int countS = 0;
int countT = 0;
int countU = 0;
int countV = 0;
int countW = 0;
int countX = 0;
int countY = 0;
int countZ = 0;
int count = 0;

while (enom != -1) {
count++;
i = enom -'a';
switch (i) {
case 0:
countA++;
break;
case 1:
countB++;
break;
case 2:
countC++;
break;
case 3:
countD++;
break;
case 4:
countE++;
break;
case 5:
countF++;
break;
case 6:
countG++;
break;
case 7:
countH++;
break;
case 8:
countI++;
break;
case 9:
countJ++;
break;
case 10:
countK++;
break;
case 11:
countL++;
break;
case 12:
countM++;
break;
case 13:
countN++;
break;
case 14:
countO++;
break;
case 15:
countP++;
break;
case 16:
countQ++;
break;
case 17:
countR++;
break;
case 18:
countS++;
break;
case 19:
countT++;
break;
case 20:
countU++;
break;
case 21:
countV++;
break;
case 22:
countW++;
break;
case 23:
countX++;
break;
case 24:
countY++;
break;
case 25:
countZ++;
break;
default:
break;
}
enom = br.read();
}

br.close();
fr.close();

System.out.println(new Double(countA)/new Double(count) * 100 + "%");
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zspzgl619
2010-01-27
知道答主
回答量:35
采纳率:0%
帮助的人:0
展开全部
第一个问题:读入的char数据是ASCII吧,所以可以用integer来存放,再说你判断的时候也是用ASCII码吧,不会用字符来判断吧
第二个问题:fr.read是自动循环的,因为它是在while循环里的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式