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

Dia*_*ana 2 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 6

看看你的循环:

while (in.hasNext())
{
    array[k] = in.next().charAt(k);
    k++;
}
Run Code Online (Sandbox Code Playgroud)

这一次读取一个标记,并k从该标记中获取该字符.所以从"早安"开始,它检索"Good"(G)的字符0 和"Morning"(o)的字符1 .

k说实话,目前还不清楚你为什么这么做- 但是如果你只是想把一个文件读入一个字符数组,那么值得使用一个Reader- 或者Files.readAllLines如果你使用的是Java 7或更高版本.例如:

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

(这将跳过换行符,但这可能是你想要的.)