从文件中的行解析double时忽略字母

时间:2013-05-24 03:47:30

标签: java parsing double

我正在尝试逐行从文件导入一些数据。我要阅读的一个特定行可能或者可能没有“kB”(kiloBytes),我想解析这行中的double,但是我的程序给了我java.lang.NumberFormatException。

    while(inputStream.hasNextLine())
    {
        inputStream.nextLine(); // Skips a line between each object
        String sn = inputStream.nextLine();
        String sa = inputStream.nextLine();
        double ss = Double.parseDouble(inputStream.nextLine()); // This is where the problem occurs
        int sd    = Integer.parseInt(inputStream.nextLine());
        addSong(sn, sa, ss, sd); // Send the four variables for Song() to the addSong method
    }
    inputStream.close();

我有一种感觉,我可以在这里使用indexOf(),但我不确定如何。

干杯!

3 个答案:

答案 0 :(得分:4)

double ss = Double.parseDouble(inputStream.nextLine().replaceAll("[a-zA-Z]", ""));

无论如何,这都可以帮助您从A-Z中删除所有字符。

答案 1 :(得分:3)

如果您只想删除“kB”,可以尝试以下操作:

String line = inputStream.nextLine();
line = line.replaceFirst("kB", "");
double ss = Double.parseDouble(line);

如果要删除parseDouble无法解析的所有内容,则必须使用正则表达式:

String line = inputStream.nextLine();
line = line.replaceAll("[^-\\d.]", "");
double ss = Double.parseDouble(line);

此正则表达式删除所有不是:

  • 一个数字(如果您对匹配UTF-8数字不感兴趣,可以使用0-9代替\\d
  • 或点(用于小数部分)
  • 或减号(用于负数)。

答案 2 :(得分:2)

通过应用replaceAll("[^\\d.]", ""),只需在阅读时删除该行中的所有非数字/点:

double ss = Double.parseDouble(inputStream.nextLine().replaceAll("[^\\d.]", ""));

这使它保持一行。