Преобразовать строку в двойники в файле.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)