【发布时间】:2017-10-28 22:25:59
【问题描述】:
我必须准备一个 .txt 文件并计算每个字母字符在文件中出现的次数。我找到了一段非常好的代码,但不幸的是,它不适用于波兰字符,如 ą,ę,ć,ó,ż,ź。即使我将它们放在数组中,由于某种原因在 .txt 文件中找不到它们,所以输出为 0。
有人知道为什么吗?也许我应该用“Switch”或类似的东西来不同地计算它们。 在有人问之前 - 是的,.txt 文件以 UTF-8 保存:)
public static void main(String[] args) throws FileNotFoundException {
int ch;
BufferedReader reader;
try {
int counter = 0;
for (char a : "AĄĆĘÓBCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray()) {
reader = new BufferedReader(new FileReader("C:\\Users\\User\\Desktop\\pan.txt"));
char toSearch = a;
counter = 0;
try {
while ((ch = reader.read()) != -1) {
if (a == Character.toUpperCase((char) ch)) {
counter++;
}
}
} catch (IOException e) {
System.out.println("Error");
e.printStackTrace();
}
System.out.println(toSearch + " occurs " + counter);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
【问题讨论】:
-
如果测试文件是 UTF8 编码的,为什么不使用 UTF8 编码而不是使用您平台的默认字符编码来读取它呢?您是否进行了基本调试,例如打印(或使用调试器检查)您读取的每个字符,打印(或使用调试器检查)其大写值?
-
请参阅 Count number of each char in a String 或 Count occurrences of each unique character 了解不会多次扫描整个文件的方法。
-
@JBNizet 简短版的答案 - 老师告诉我们这样做 -.- 我猜她没想到它不起作用。 Aaaa 不,但使用“InputStreamReader”会有所帮助。
-
@Andreas 谢谢,会看看!
标签: java bufferedreader