Java - 从文件中读取错误的字符

时间:2015-01-11 11:05:46

标签: java

我想编写一个程序,逐个字符地从文件中读取文本,并计算每个字符的出现频率。

我有以下代码:

import java.util.Scanner;
import java.io.*;

public class text {

    public static void frequency (char[] array, int k)
    {
        int ok=0;
        for (char i ='a'; i<='z'; i++)
        {
            ok=0;
            for (int j=0; j<k; j++)
                if (i==array[j])
                    ok++;
            if (ok!=0)
            {
                System.out.println (i + " appears for " + ok + " times");
            }
        }
    }

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

        Scanner in = new Scanner(new File("C:\\Users\\Diana\\workspace\\Text\\src\\FileInput"));
        char[] array = new char [100]; 
        int k=0;

        while (in.hasNext())
        {
            array[k] = in.next().charAt(k);
            k++;
        }
        for (int i=0; i<k; i++)
            System.out.print (array[i]);
        in.close();
        frequency (array, k);
    }
}

问题是它没有读取我文件中的所有值。如果我有早安,它只会读取 Go 。我有什么想法吗?

1 个答案:

答案 0 :(得分:6)

看看你的循环:

while (in.hasNext())
{
    array[k] = in.next().charAt(k);
    k++;
}

一次读取一个标记,并从该标记中获取k个字符。所以来自&#34;早安&#34;它检索&#34; Good&#34;的字符0 (G)和#34;早晨&#34;的角色1 (o)。

不清楚为什么你有k,说实话 - 但如果你只是想把文件读成字符数组,那就值得使用了如果您使用的是Java 7或更高版本,请改为Reader - 或Files.readAllLines。例如:

List<String> lines = Files.readAllLines(Paths.get("FileInput"));
StringBuilder builder = new StringBuilder();
for (String line : lines) {
    builder.append(line);
}
char[] array = builder.toString().toCharArray();

(这会跳过换行符,但可能你想要的。)