Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java扫描程序模式_Java_Token - Fatal编程技术网

Java扫描程序模式

Java扫描程序模式,java,token,Java,Token,我正在尝试从文件中读取特定文本。文本格式为 @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().eq

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

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

我认为您必须在取回标记后处理引号,因为在中,正则表达式用于测试下一个标记,而不是确定下一个标记

因此,您不需要让标记器返回
x
,而需要期望标记器返回
'x',
,然后使输出正常工作。幸运的是,这并不难。一种快速而肮脏的方法如下所示:

String quotedToken=scanner.next();
quotedToken = quotedToken.replace('\'', ' ');
quotedToken = quotedToken.replace(',', ' ');
quotedToken = quotedToken.trim();
可能还值得注意的是,如果您对分隔符有点了解,您可以使用
扫描仪
来处理逗号:

`scanner.useDelimiter(",?\\s+");`