我想解析一个 UTF8 编码的文本文件,它可能包含这样的内容:
int 1
text " some text with \" and \\ "
int list[-45,54, 435 ,-65]
float list [ 4.0, 5.2,-5.2342e+4]
列表中的数字用逗号分隔。此处允许在任何数字和任何符号(如逗号和括号)之间使用空格,但不需要空格。对于单词和符号也是如此,例如list[
我通过强制 Scanner 给我单个字符(将其分隔符设置为空模式)来完成引用字符串的读取,因为我仍然认为它对于读取整数和浮点数很有用,但我不确定了。
Scanner 总是获取一个完整的令牌,然后尝试匹配它。我需要的是尝试尽可能多(或尽可能少地)匹配,而不考虑分隔符。
基本上对于这个输入
int list[-45,54, 435 ,-65]
我希望能够打电话并得到这个
s.nextWord() // int
s.nextWord() // list
s.nextSymbol() // [
s.nextInt() // -45
s.nextSymbol() // ,
s.nextInt() // 54
s.nextSymbol() // ,
s.nextInt() // 435
s.nextSymbol() // ,
s.nextInt() // -65
s.nextSymbol() // ]
等等。
或者,如果它本身无法解析双精度数和其他类型,则至少有一个采用正则表达式的方法,返回与其匹配的最大字符串(或错误)并将流位置设置为紧随其匹配的位置。
扫描仪可以以某种方式用于此目的吗?还是有其他方法?我觉得这一定是一件很常见的事情,但我似乎无法找到合适的工具。