我想编写一个程序,逐个字符地从文件中读取文本,并计算每个字符的出现频率。
我有以下代码:
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 。我有什么想法吗?
答案 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();
(这会跳过换行符,但可能你想要的。)