我想编写一个程序,逐个字符地从文件中读取文本,并计算每个字符出现的频率.
我有以下代码:
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.我有什么想法我做错了吗?
看看你的循环:
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)
(这将跳过换行符,但这可能是你想要的.)
| 归档时间: |
|
| 查看次数: |
251 次 |
| 最近记录: |