Java BufferedReader文件IO给出奇怪的,不准确的输出

时间:2014-11-04 01:43:21

标签: java io bufferedreader

这里的想法是程序逐字逐句地通过文本文件,并计算每个字母的出现次数,然后将出现的数量存储到数组中。但是,我得到奇怪的,不准确的输出,我似乎无法解决。在线答案似乎没有帮助。这可能是我想念的非常简单,但我需要在正确的方向上进行额外的推动。

char token;
char[] alphabet = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
int[] occurences = new int[25];
BufferedReader inFile = new BufferedReader(new FileReader("plaintext.txt"));

while (inFile.read() > -1) {
    token = (char)inFile.read();
    for (int i = 0; i < alphabet.length; i++) {
        if (Character.compare(token, alphabet[i]) == 0) {
            occurences[i] += 1;
        }
    }
}

for (int i = 0; i < occurences.length; i++) {
        System.out.println(occurences[i]);
}

inFile.close();

鉴于plaintext.txt包含以下内容:

aaa
aaa
bbb
[];'
abcdefgh qrstuv

我得到以下输出:

3
1
1
0 
1
0
1
0
0
0
0
0
0
0
0
0
0
1
0
1
0
1
0
0
0

提前致谢!

2 个答案:

答案 0 :(得分:1)

你忽略了用

读入的一半字符
while (inFile.read() > -1) {
    token = (char)inFile.read();
不要这样做。阅读并全部使用

int intToken = 0;
while ((intToken = inFile.read()) > -1) {
    token = (char)intToken;

答案 1 :(得分:1)

while (inFile.read() > -1) {
    token = (char)inFile.read();

转换为:读取一个字符,丢弃它。读另一个,对待它。再读一遍,丢弃等等。

你可以获得灵感here - 基本上:

int c;
while ((c = inFile.read()) != -1) {
    // there's no need to declare token before this loop
    char token =  (char) c ;  
}