4

ファイルから行ごとにデータをインポートしようとしています。読み取る予定だった特定の行の末尾に「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() を使用できる気がしますが、方法がわかりません。

乾杯!

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.]", ""));

これにより、1行に収まります。

于 2013-05-24T03:54:11.690 に答える