Java 在.txt文件中将字符串转换为双精度?

Java 在.txt文件中将字符串转换为双精度?,java,parsing,split,java.util.scanner,printwriter,Java,Parsing,Split,Java.util.scanner,Printwriter,我有一个.txt格式的数字文件,格式如下: 1.2.3.4.5 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 我正在尝试使用扫描仪将每一行作为一个字符串,将每一个数字转换为一个双精度数字,然后将它们添加到一起,打印到一个新的.txt文件中。 我的错误消息如下所示: 线程“main”java.lang.NumberFormatException中的异常:用于输入 字符串:“1.2.3 3.4 4.5”位于 sun.misc.FloatingDecimal.readJavaForm

我有一个.txt格式的数字文件,格式如下:

1.2.3.4.5
2.0 3.0 4.0 5.0
6.0 7.0 8.0 9.0

我正在尝试使用扫描仪将每一行作为一个字符串,将每一个数字转换为一个双精度数字,然后将它们添加到一起,打印到一个新的.txt文件中。 我的错误消息如下所示:

线程“main”java.lang.NumberFormatException中的异常:用于输入 字符串:“1.2.3 3.4 4.5”位于 sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043) 位于sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110) java.lang.Double.parseDouble(Double.java:538)位于 scanstrings.scanstrings.parseDouble(scanstrings.java:51)位于 scanstrings.scanstrings.main(scanstrings.java:33)

我试图使用拆分来分隔每个数字,以便将它们转换为双精度,但无论我做什么,似乎都不起作用。我找到了使用空格和句点拆分的方法,但每次尝试都会返回相同的错误消息

我的代码现在看起来基本上是这样的(我只是刚刚开始,所以如果它很糟糕,我很抱歉,我也已经处理了一段时间,所以有些部分可能没有意义

 //Construct Scanner object for the input file 
    Scanner input = new Scanner (new File("one.txt"));

    //Construct Scanner object for the output file
    PrintWriter output = new PrintWriter("result.txt");

    //Read lines from the input file

    while(input.hasNextLine()){
        String line = input.nextLine();

        String[] conv = line.split("\\s+");
        String dub1 = conv[0];
        String dub2 = conv[1];
        String dub3 = conv[2];
        String dub4 = conv[3];


        //convert to double
        double dub = parseDouble(line);

        //compute sum
        double total = 0;
        if (dub != 0) //protect against division by zero
        {
            total += dub;
        }
        System.out.printf("\n", dub, total);
    }

    input.close();
    output.close();     
}

public static double parseDouble(String conv) throws NumberFormatException{
    int i = 0;
    while (!Character.isDigit(conv.charAt(i))) { i++; }
    return Double.parseDouble(conv.substring(i).trim());
}

欢迎来到StackOverflow

您已将行拆分为各个术语,但随后将整行内容传递给您的语法分析:

double dub = parseDouble(line);
相反,请尝试:

double dub = parseDouble(conv[0]);
对于第一个值。(您甚至可以尝试为所有值创建一个循环。)

(据我所知,您希望在输入文件的每一行中添加数字,并在输出文件的新行中打印)。更简单的方法是使用
Double.parseDouble(字符串)
将字符串转换为
Double
。新版本的
parseDouble(行)


因此,在这种情况下,您应该将
parseDouble(字符串行)
重命名为
getSum(字符串行)

我所做的循环实际上并不适用于此。我也在程序中更改了此项,现在它运行了,但没有使用printwriter成功地打印到新的.txt文件中。我会继续尝试!StackOverflow在一次只问一个问题时效果最好。但是,有帮助的是:您的打印问题源于使用
System.out.printf
而不是
output.printf
。如果您需要更多帮助,请询问有关PrintWriter的新问题;此问题和答案应关注您的NFE问题。
public static double parseDouble(String line){
   double res = 0;
   for(String number : line.split("\\s+") ){
       try{
              res += Double.parseDouble(number);
       }
       catch(NumberFormatException ex){
              System.out.println("Cannot convert " + number + " to double");
       }
       finally{
              return res;
       }
   }