解析文本 - 扫描仪或BufferedReader?
对于我的数据结构类,第一个项目需要解析歌曲的文本文件。解析文本 - 扫描仪或BufferedReader?
输入的一个例子是:
ARTIST =“未知”
TITLE =“Rockabye宝贝”
歌词=“Rockabye宝宝在树梢
当风儿吹起你的摇篮摇
当弓伤了你的摇篮也就掉
下会婴儿摇篮和所有
“
我想知道的艺术家,标题和歌词提取歌曲中的类各自的字符串字段的最佳途径。我的第一反应是使用扫描仪,取第一个字符,并根据字母使用skip()提前输入所需字符并读取引号之间的文本。
如果我使用这个,我会失去缓冲输入。完整的歌曲文本文件有超过422K行文字。即使没有缓冲,扫描仪是否可以处理这个问题?
对于这样的事情,你应该使用正则表达式。 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/并做好准备。努力是所以非常值得所需的时间。
在这种情况下,您可以使用CSV reader,字段分隔符'='和字段分隔符'''(双引号)。它不完美,因为您为ARTIST,TITLE和LYRICS获取一行。
这也会解决转义字符的问题(LYRICS中的双引号)。顺便说一下,还有其他的CSV阅读器工具,我只是链接了我所知道的(并且自己写的)。 – 2010-09-12 06:29:59
正则表达式是解决方案 – mhshams 2010-09-11 17:32:19
我正在研究正则表达式,它看起来符合我的需求,事情是,这将是我第一次使用这个&它非常复杂,谢谢你的链接 – Jason 2010-09-11 20:16:35
因为这只是一个数据结构课程,输入很简单,所以正则表达式可能是过量的。 – MAK 2010-09-11 20:47:37