Преобразовать строку в двойники в файле.txt?

У меня есть.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: для входной строки: "1.2 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());
}

2 ответа

Добро пожаловать в Stackru!

Вы разделили свою строку на отдельные термины, но затем передаете всю строку на ваш анализ следующим образом:

double dub = parseDouble(line);

Вместо этого попробуйте:

double dub = parseDouble(conv[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)

Другие вопросы по тегам