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

时间:2016-12-06 04:55:04

标签: java parsing split java.util.scanner printwriter

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

1.2 2.3 3.4 4.5 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0

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

  

线程中的异常" main" java.lang.NumberFormatException:用于输入   string:" 1.2 2.3 3.4 4.5"在   sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043)     在sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)at at   java.lang.Double.parseDouble(Double.java:538)at   scanstrings.ScanStrings.parseDouble(ScanStrings.java:51)at   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());
}

2 个答案:

答案 0 :(得分:1)

欢迎使用StackOverflow!

您已将行划分为单独的术语,但随后将整行传递给您的解析:

double dub = parseDouble(line);

相反,请尝试:

double dub = parseDouble(conv[0]);

表示第一个值。 (您甚至可能想尝试为所有值创建一个循环。)

答案 1 :(得分:0)

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

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;
       }
   }

因此,在这种情况下,您应该将parseDouble(String line)重命名为getSum(String line)