我正在尝试从文件中读取特定文本。文字格式为
@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标记之后对这些行进行标记?
答案 0 :(得分:1)
我认为在你获得令牌后你将不得不处理引号,因为在the Scanner#next(String)
method中,正则表达式用于测试下一个令牌,而不是确定下一个令牌。
因此,您不必让tokenizer返回x
,而是必须期望tokenizer返回'x',
,然后使该输出有效。幸运的是,这并不难。一个快速而肮脏的方法就是这样:
String quotedToken=scanner.next();
quotedToken = quotedToken.replace('\'', ' ');
quotedToken = quotedToken.replace(',', ' ');
quotedToken = quotedToken.trim();
如果您对分隔符有点聪明,可能还值得注意的是,您可以让Scanner
为您处理逗号:
`scanner.useDelimiter(",?\\s+");`