解析text-Scanner或BufferedReader?

时间:2010-09-11 17:21:43

标签: java parsing java.util.scanner buffering

对于我的数据结构类,第一个项目需要一个要解析的歌曲文本文件。

输入的一个例子是:
艺术家=“未知”
TITLE =“Rockabye Baby”
LYRICS =“树梢上的Rockabye宝宝” 当风吹起你的摇篮时会摇滚 当弓断裂时,你的摇篮会掉下来 羽绒将来到婴儿摇篮和所有

我想知道将歌曲艺术家,标题和歌词提取到Song类中各自字符串字段的最佳方法。我的第一反应是使用扫描仪,接受第一个字符,并根据字母,使用skip()来推进所需的字符并读取引号之间的文本。

如果我使用它,我将失去缓冲输入。完整的歌曲文本文件有超过422K行文本。即使没有缓冲,扫描仪能否处理?

3 个答案:

答案 0 :(得分:3)

对于这样的事情,你应该只使用正则表达式。 Matcher类支持缓冲输入。

find方法采用偏移量,因此您只需在每个偏移处解析它们。

http://download.oracle.com/javase/1.4.2/docs/api/java/util/regex/Matcher.html

正则表达是一个完整的世界。如果您以前从未使用过它们,请从http://download.oracle.com/javase/tutorial/essential/regex/开始,并做好准备。努力所以非常值得花时间。

答案 1 :(得分:1)

如果可以使用一个令牌提前解析源数据,StreamTokenizer可能是一个选择。这是一个example,用于比较StreamTokenizerScanner

答案 2 :(得分:1)

在这种情况下,你可以使用CSV reader,字段分隔符'='和字段分隔符'''(双引号)。这不是完美的,因为你得到一行艺术家,TITLE,和LYRICS。