读取在多行txt文件中扩展的双精度数

时间:2015-12-06 21:06:17

标签: java java.util.scanner delimiter

我的要求是从文本文件中读取双数组。显然我对分隔符有错误,这似乎微不足道。

示例:

  

4

     

0.000000000000000,0.000000000000000,1.00000000000000000,1.000000000000000

其中4是双数组的长度,下面的值用逗号和空格分隔。

Scanner es =  new Scanner(filename);    
int numberofValues = es.readInt();
double[] Vector = new double[numberofValues];
for (int k = 0; k < numberofKnotValues; k++)
{
    knotValueVector[k] = es.nextDouble();
}

因此,在一个文本行中最多可以有15个double值,我没有遇到任何问题。但是,如果我应该读取的向量具有更多值,则将值分成两行或更多行,如下所示:

  

0.000000000000000,0.000000000000000,0.000000000000000,0.125000000000000,0.250000000000000,0.375000000000000,0.500000000000000,0.625000000000000,0.750000000000000,0.875000000000000,1.00000000000000000,1.000000000000000,1.00000000000000000

问题出在我读完该行的最后一行后,逗号仍然在结尾处。当我尝试读取下一个双精度时,会发生一个错误,即它不是双倍空格。

到目前为止,分隔符(“,*”)似乎足以读取行的双精度数,但我找不到适合多行的分隔符,尽管我尝试了一些像

  

“S * \ n” 个

     

“S * \ R”

但它们似乎不起作用。所以一些帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

由于第一个数字(4)与其余数字之间没有逗号,但总是有空格,请将分隔符设置为:

",?\\s+"

<强>更新

我给出的模式似乎工作正常,无论每行给出多少个数字,以及一行是否以逗号结尾:

String input = "13\r\n" +
               "\r\n" +
               "0.000000000000000, 0.000000000000000, 0.000000000000000, 0.125000000000000,\r\n" +
               "0.250000000000000, 0.375000000000000, 0.500000000000000, 0.625000000000000\r\n" +
               "0.750000000000000, 0.875000000000000, 1.000000000000000, 1.000000000000000,\r\n" +
               "1.000000000000000";
Scanner in = new Scanner(input);
in.useDelimiter(",?\\s+");
int count = in.nextInt();
double[] values = new double[count];
for (int i = 0; i < count; i++)
    values[i] = in.nextDouble();
System.out.println(Arrays.toString(values));

输出

[0.0, 0.0, 0.0, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875, 1.0, 1.0, 1.0]