4

我正在尝试从文件中逐行导入一些数据。我要读取的一个特定行末尾可能有也可能没有“kB”(千字节),我想解析这一行中的双精度,但我的程序给了我 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() 但我不确定如何。

干杯!

4

3 回答 3

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

这将帮助您从 AZ 中删除所有字符,无论大小写如何。

于 2013-05-24T03:57:58.170 回答
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
  • 或一个点(用于小数部分)
  • 或减号(用于负数)。
于 2013-05-24T03:53:09.210 回答
2

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

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

这使它保持在一条线上。

于 2013-05-24T03:54:11.690 回答