0

次のステートメントに対して、talend ETL ツールで NumberFormatException が発生します。

Integer.parseInt("+2");

エラーの詳細:

Exception in component tJavaRow_3
java.lang.NumberFormatException: For input string: "+2"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:449)
at java.lang.Integer.parseInt(Integer.java:499)

これは、私のテスト Java プログラムで問題なく実行される、本当に単純なコードです。

public class Main { 
   public static void main(String[] args) { 
      String s = "+000000100"; 
      System.out.println(String.valueOf(new Integer(s))); 
   } 
}

実際には位置ファイルからこの値を取得しており、値は +0002 または -0002 (符号の前に付いた有効な数値) のようなものになります。そして、入力に小数が含まれないことは確かです。

前もって感謝します。

4

3 に答える 3

2

+2は有効な干渉ではありません。それはちょうどあるはずです2

于 2012-07-27T19:56:47.430 に答える
1

+番号の先頭からザッピングするだけです:

num = num.replaceAll("\\+", "");
// parse, etc.
于 2012-07-27T19:59:14.390 に答える
1

あなたのコンテキストで+2は、正の数を意味する必要があります2。解析を行う関数に文字列を渡すときは注意してください。これは int を解析するため、3.5or 3,5(10 進数) などの一部の式が期待どおりの結果にならないためです。そのコードを制御できる場合は、代わりに Double.parseDouble または Float.parseFloat を使用する必要があります。一方、負の数のようなもの-2は問題なく解析されます。

編集:位置ファイルを使用している場合は、正規表現を使用するか、部分文字列を取得して、文字列の先頭から + を削除するだけです。startsWith("+")また、文字列が + で始まるかどうかを確認するために使用することもできます。

于 2012-07-27T20:08:09.227 に答える