如何在Java中从txt文件生成连续字符的频率矩阵?

时间:2019-05-17 18:10:22

标签: java file frequency

我有一个很大的txt文件(2GB)。我使用以下代码片段逐字符读取整个txt文件,以找出整个txt文件中每个字符的频率。

BufferedReader reader = new BufferedReader(
                new InputStreamReader(
                        new FileInputStream(file),
                        Charset.forName("UTF-8")));
        int c;
        while ((c = reader.read()) != -1) {
            char ch = (char) c;
            // rest of the code
        }

现在,我需要生成一个具有连续字符频率的矩阵。 例如,字符“ b”在字符“ a”(连续的立即字符)之后存在多少次,反之亦然。

假设我有一个输入字符串(来自文件): cad bed abed dada

频率矩阵就像 Please click here to see the image

如何执行此操作?将不胜感激任何帮助和建议。 谢谢。

1 个答案:

答案 0 :(得分:0)

跟踪最后读取的字符。如果lastchar ==''继续。使用Map存储值,然后可以遍历组合并从map中提取值,或者可以通过从当前字符对中减去char'a'的int值来直接寻址2d数组。

    Map<String, Integer> table = new HashMap<>();
    String last = "";
    for (char c : input.toCharArray()) {
        if (last.isEmpty()) {
            last = String.format("%c", c);
            continue;
        }
        String thing = last + c;
        Integer count = table.getOrDefault(thing, 0);
        table.put(thing, count + 1);
        last = String.format("%c", c);
    }