令牌Java扫描程序模式
我正在尝试从文件中读取特定文本。文本格式为
@INFO
@DATA
'x', -1, 1
'y', -1, 1
现在我必须标记@DATA标记后面的文本
x
-1
1
y
-1
1
现在我知道了
Scanner in=null;
try {
in=new Scanner(file);
} catch (FileNotFoundException e) {
return 1;
}
while(in.hasNext() && !in.next().equals("@DATA"));
while(in.hasNext()) {
try {
Object[] obj = new Object[3];
obj[0] = in.next();
obj[1] = in.nextDouble();
obj[2] = in.nextDouble();
} catch(Exception e) {
return 2;
}
}
return 0;
它工作得几乎很好(得到“x”,但我必须得到引号之间的单词(')in.next("'([^']*)'");
不起作用(java.util.InputMismatchException)。如何标记@DATA标记后面的行
# 1 楼答案
我认为在拿回标记后,您必须处理引号,因为在the ^{} method 中,正则表达式用于测试下一个标记,而不是确定下一个标记
因此,与让标记器返回
x
不同,您必须期望标记器返回'x',
,然后使输出工作。幸运的是,这并不难。一种快速而肮脏的方法如下所示:可能还值得注意的是,如果您对分隔符有点了解,您可以使用
Scanner
来处理逗号: