0

我正在尝试从文件中读取特定文本。文本格式为

@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 标记之后标记这些行?

4

1 回答 1

1

我认为在取回令牌后您将不得不处理引号,因为在methodScanner#next(String),正则表达式用于测试下一个令牌,而不是确定下一个令牌。

因此,与其让分词器返回x,不如让分词器返回'x',,然后使输出工作。幸运的是,这并不难。一种快速而肮脏的方法如下所示:

String quotedToken=scanner.next();
quotedToken = quotedToken.replace('\'', ' ');
quotedToken = quotedToken.replace(',', ' ');
quotedToken = quotedToken.trim();

可能还值得注意的是,Scanner如果您对分隔符有点聪明,您可以让 为您处理逗号:

`scanner.useDelimiter(",?\\s+");`
于 2013-06-09T16:26:41.113 回答