java - 文件中字符出现的计数/频率分布,包括不可见的字符

标签 java hashmap

我的目标是在大型平面文件(1GB+)中创建每个字符的频率分布,以便以后导入数据库。理想情况下,输出是一个 ASCII 字符列表,每个字符后跟一个计数。

我目前正在使用 HashMap 来创建字符串中每个值的分布,并且它有点有效,我只是不确定如何在大文件上实现它。此外,在我的输出中,CR 和 LF(或/r/n)字符会产生一个新行,并在下一行中计数。

这是当前代码:

public class CharCount{
public static void main(String[] args) {

String s = "abcdefghijklmnopqrstuvwxyz1234567890,.)(/\\<>?!@#$%^&*_-+=\r\n";

char[] arr = s.toCharArray();

HashMap <Character,Integer> count = new HashMap<Character, Integer>();

for (char c : arr) {

try {
count.put(c, count.get(c)+1);
} catch (NullPointerException e) {

count.put(c, 1);
}
}

for (Character c: count.keySet()) {
System.out.println(c + " = " + (int)c + " = " + count.get(c));
}
}
}

理想的输出如下所示:

000 NUL 4124435 001 SOH 0
002 STX 0
003 ETX 0
.....
253 ý 0
254 þ 0
255 ÿ 0

非常感谢任何帮助!

最佳答案

如果您只处理 ASCII 字符,即 0-255 范围内的字符,那么只使用一个整数(或可能是一个长)数组 [256],然后读取文件(实际上一次读取一个字符)会更简单(当然,您可以使用缓冲或 NIO 来提高速度)并增加适当的 bin。

也就是说,您的 HashMap 代码看起来很合理,但我不确定您的问题是什么???

关于java - 文件中字符出现的计数/频率分布,包括不可见的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8734770/

相关文章:

c++ - Rust 是否像 C++ 一样在索引时隐式创建映射条目?

java - 有没有办法在代码中设置 GWT 按钮的光标样式?

java - 访问矩阵的框

java - 使用 Java 的 Adob​​e Air Native Process

android - 当我在 android 中使用 HashMap 时显示警告(使用新的 SparseArray<String>)

java - 如何使用BulkRequest将ArrayList发送到ElasticSearch中?

java - 在 XSLT 中得到错误的输出?

java - 如何在布局中的 View 之间传输数据

go - 我可以在没有两次索引调用的情况下同时更新和检索 Map 中的元素吗?

performance - Unordered_Map查找时间