Java 带扫描程序的多个分隔符
我正在尝试读取多行文件。内容的格式如下:Java 带扫描程序的多个分隔符,java,java.util.scanner,delimiter,Java,Java.util.scanner,Delimiter,我正在尝试读取多行文件。内容的格式如下:(0,250,6.4545250) 我尝试使用use.Delimiter()函数,如下所示 r = new FileInputStream ("Z:\\RTS\\HW2\\input.txt"); Scanner src = new Scanner(r); src.useDelimiter("\\{(\\s),\\}+"); if(r!= null) { i=0; while (src.hasNext()) { System.out.
(0,250,6.4545250)
我尝试使用use.Delimiter()函数,如下所示
r = new FileInputStream ("Z:\\RTS\\HW2\\input.txt");
Scanner src = new Scanner(r);
src.useDelimiter("\\{(\\s),\\}+");
if(r!= null)
{
i=0;
while (src.hasNext())
{
System.out.println(src.nextInt()); // Line 84
if(src.hasNext())
a = (double)src.nextInt();
if(src.hasNext())
{
b = (double)src.nextInt();
period[i] = (int)b;
}
if(src.hasNext())
{
c = src.nextDouble();
exTime[i] = c;
}
if(src.hasNext())
d = src.nextDouble();
src.nextLine();
i++;
}
}
我得到以下例外情况:
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at rm.rmcalc.main(rmcalc.java:84)
我认为不匹配可能是因为scanner函数无法识别分隔符。有人能告诉我在声明分隔符时是否出错吗?这里有很多问题,其中最重要的一点是您的正则表达式完全乱码了
\{(\s),\}+
您正在匹配一个literal{
,后跟一个空格和一个逗号,然后是另一个或多个literal}
s。如果您试图使用逗号拆分,通常只需:
\s*,\s*
(旁注,Debuggex很棒,但它不是Java特有的——我非常喜欢玩Java模式。)
但是,一旦您修复了分隔符,您仍然会遇到问题。您根本没有正确使用扫描仪。看看第一个。至少,您需要将
.hasNext*()
调用与.next*()
调用配对,即在调用.nextInt()之前调用hasNextInt()
。但您也在进行一系列复杂的条件处理,对于格式错误的数据,这些处理将以奇怪的方式失败
让我建议一种不同的模式,而不是带你去清理。通常,当人们想要读取文件时,他们使用两个独立的扫描仪。一个使用默认的分隔符,他们只需重复调用.nextLine()
。然后,他们用自定义分隔符将该行传递到第二个扫描仪,并逐行提取各个组件。这使您可以轻松地测试解析一行,这样您就可以将行解析行为与文件读取行为分开调试。我不确定是否完全遵循了这一点。使用nextDouble读取具有浮点值(6.4545)的字段。这不应该造成不匹配,对吗?