【问题标题】:How to count occurrence of Polish characters in .txt file如何计算 .txt 文件中波兰语字符的出现次数
【发布时间】: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 StringCount occurrences of each unique character 了解不会多次扫描整个文件的方法。
  • @JBNizet 简短版的答案 - 老师告诉我们这样做 -.- 我猜她没想到它不起作用。 Aaaa 不,但使用“InputStreamReader”会有所帮助。
  • @Andreas 谢谢,会看看!

标签: java bufferedreader


【解决方案1】:

看起来你的问题与编码和默认系统charset有关

尝试将 reader 变量更改为此

InputStreamReader reader = new InputStreamReader(new FileInputStream("C:\\Users\\User\\Desktop\\pan.txt"), "UTF-8");

【讨论】:

    【解决方案2】:

    试试这个: 我建议您使用 NIO,我为您编写的这段代码使用更快的 NIO、RandomAccessFile 和 MappedByteBuffer:

    import java.io.IOException;
    import java.io.RandomAccessFile;
    import java.nio.MappedByteBuffer;
    import java.nio.channels.FileChannel;
    import java.util.HashMap;
    import java.util.Map;
    
    public class FileReadNio
    {
    public static void main(String[] args) throws IOException
    {
        Map<Character, Integer> charCountMap = new HashMap<>();
    
        RandomAccessFile rndFile = new RandomAccessFile
                ("c:\\test123.txt", "r");
        FileChannel inChannel = rndFile.getChannel();
        MappedByteBuffer buffer = inChannel.map(FileChannel.MapMode.READ_ONLY, 0, inChannel.size());
        buffer.load();
        for (int i = 0; i < buffer.limit(); i++)
        {
    
            char c = (char) buffer.get();
    
            if (charCountMap.get(c) != null) {
            int cnt = charCountMap.get(c);
                charCountMap.put(c, ++cnt);
    
            }
            else
            {
                charCountMap.put(c, 1);
            }
        }
    
        for (Map.Entry<Character,Integer> characterIntegerEntry : charCountMap.entrySet()) {
    
            System.out.printf("char: %s :: count=%d", characterIntegerEntry.getKey(), characterIntegerEntry.getValue());
            System.out.println();
        }
    
        buffer.clear();
        inChannel.close();
        rndFile.close();
    }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-11-03
      • 1970-01-01
      • 2021-03-16
      • 1970-01-01
      • 2013-12-23
      • 1970-01-01
      • 2011-10-08
      • 2014-06-07
      • 2013-10-10
      相关资源
      最近更新 更多