Java 在.txt文件中将字符串转换为双精度?
我有一个.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
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;
}
}