Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 分析文件中某行的双精度字符时忽略字母_Java_Parsing_Double - Fatal编程技术网

Java 分析文件中某行的双精度字符时忽略字母

Java 分析文件中某行的双精度字符时忽略字母,java,parsing,double,Java,Parsing,Double,我正在尝试逐行从文件导入一些数据。我要从may或may中读取的某一行末尾可能有或没有“kB”(千字节),我想解析这一行中的double,但我的程序给了我java.lang.NumberFormatException while(inputStream.hasNextLine()) { inputStream.nextLine(); // Skips a line between each object String sn = inputStream

我正在尝试逐行从文件导入一些数据。我要从may或may中读取的某一行末尾可能有或没有“kB”(千字节),我想解析这一行中的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(),但我不确定如何使用


干杯

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

String line = inputStream.nextLine();
line = line.replaceFirst("kB", "");
double ss = Double.parseDouble(line);
如果要删除所有无法由
parseDouble
解析的内容,则必须使用regexp:

String line = inputStream.nextLine();
line = line.replaceAll("[^-\\d.]", "");
double ss = Double.parseDouble(line);
此regexp将删除所有不是:

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

只要在阅读该行时,通过应用
replaceAll(“[^\\d.]”,“”)去掉该行中的所有非数字/点即可。

这使它保持在一行

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

这将有助于从A-Z中删除所有字符,而不考虑大小写。

不要害怕代码中有描述性标识符名称。像
sn
这样的名称是模糊的,但是像
songName
这样的名称会更清晰。谢谢David,我在我的歌曲类中使用了更多描述性术语,但我只是用来传递参数。这是一个非常小的程序,但你是对的,我可能应该用更具描述性的名称。谢谢,弗洛伦特。我不知道replaceAll():)没问题;)很高兴它帮了你,不用担心。不要因为没有被选为公认的答案而吃酸葡萄,但我要指出的是,如果你得到的是字母以外的任何其他字符,甚至包括空格,你将得到与你目前得到的公认答案相同的错误。然而,我的代码将保护您免受可能出现的所有任性字符的攻击。Cheers M8带replaceAll(“[^\\d.]”,“”)的两个答案中的一个应该是可接受的答案,而replaceAll(“[a-zA-Z]”,“”)并不是一个好的解决方案。
double ss = Double.parseDouble(inputStream.nextLine().replaceAll("[a-zA-Z]", ""));