对于我的数据结构类,第一个项目需要一个要解析的歌曲文本文件。
输入的一个例子是:
艺术家=“未知”
TITLE =“Rockabye Baby”
LYRICS =“树梢上的Rockabye宝宝”
当风吹起你的摇篮时会摇滚
当弓断裂时,你的摇篮会掉下来
羽绒将来到婴儿摇篮和所有
“
我想知道将歌曲艺术家,标题和歌词提取到Song类中各自字符串字段的最佳方法。我的第一反应是使用扫描仪,接受第一个字符,并根据字母,使用skip()来推进所需的字符并读取引号之间的文本。
如果我使用它,我将失去缓冲输入。完整的歌曲文本文件有超过422K行文本。即使没有缓冲,扫描仪能否处理?
答案 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,用于比较StreamTokenizer
和Scanner
。
答案 2 :(得分:1)
在这种情况下,你可以使用CSV reader,字段分隔符'='和字段分隔符'''(双引号)。这不是完美的,因为你得到一行艺术家,TITLE,和LYRICS。