如何将文件内容视为String

Jim*_*uch 1 java text dictionary file

我正在创建一个使用字典的Scrabble游戏.为了提高效率,不是将整个字典(通过txt文件)加载到数据结构(Set,List等),而是有任何内置的java类可以帮助我将文件的内容视为String.

具体是什么我想要做的是检查在游戏中做了一个字是否是通过做一些简单的像fileName.contains(字),而不是有一个巨大的列表是存储效率低,使用list.contains字典的有效字(词).

你们对我能做什么有任何想法吗?如果字典文件必须是txt文件以外的其他内容(例如xml文件),我也可以尝试使用它.

注:我不是在寻找http://commons.apache.org/io/api-1.4/org/apache/commons/io/FileUtils.html#readFileToString%28java.io.File%29

此方法不是Java API的一部分.

HashSet没有浮现在脑海中,我坚持认为所有contains()方法都使用了O(n)时间,感谢Bozho清除它,看起来我将使用HashSet.

Boz*_*zho 7

我认为你最好的选择是将它们全部加载到内存中HashSet.有contains(word)O(1).

如果你把它放在内存中就可以String了,那么把它作为调用的contains(..)效率要低得多HashSet.

我必须提到另一个选项 - 有一个数据结构来表示字典 - 它被称为Trie.但是,您无法在JDK中找到实现.

一个非常粗略的计算表明,使用所有英语单词(100万),您将需要~12兆字节的RAM.这比JVM的默认内存设置少几倍.(平均100万*6个字母*每个字母2个字节= 12个百万字节,约为12兆字节).(好吧,也许更多的存储哈希)

如果你真的坚持不在内存中读取它,并且你想扫描文件中的某个单词,那么你可以使用a java.util.Scanner和它scanner.findWithHorizon(..).但这样效率很低 - 我假设O(n)和I/O开销.