1

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

输入的一个例子是:
ARTIST="unknown"
TITLE="Rockabye Baby"
LYRICS="Rockabye baby in the treetops
当风吹你的摇篮时,你的摇篮会摇晃
当弓折断时,你的摇篮会掉下
来 Down will come baby cradle and all
"

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

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

4

3 回答 3

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/并做好准备。付出的时间非常值得。

于 2010-09-11T17:26:13.000 回答
1

如果可以使用一个标记解析源数据,StreamTokenizer则可能是一种选择。这是一个比较和的示例StreamTokenizerScanner

于 2010-09-11T20:01:08.657 回答
1

在这种情况下,您可以使用CSV 阅读器,字段分隔符为 '=',字段分隔符为 '"'(双引号)。这并不完美,因为您获得了 ARTIST、TITLE 和 LYRICS 的一行。

于 2010-09-11T20:27:19.553 回答