2012-01-16 11 views
6

String配列要素からintを解析しようとしています。ここに私のコードは次のとおりです。Java ParseInt健全性チェック

String length = messageContents[k].replace("Content-Length:", "").replace(" ", ""); 
System.out.println("Length is: " + length); 
int test= Integer.parseInt(length); 

System.out.println次の値を返します。長は次のようになります。23

しかし、私はjava.lang.NumberFormatExceptionがスローされます、intStringを解析しようとすると、 23は文句を言わないintに解析されますどのように

java.lang.NumberFormatException: For input string: "23" 

は、私は少し困惑しています。私はそこにはそれを妨げている他のキャラクターがいると仮定することができますが、私の人生のためにそれを見ることはできません。

提案がありますか?

おかげ

更新

Despite the String length having only two characters, Java reports its length as three: 
Length is: '23' 
Length of length variable is: 3 
length.getBytes = [[email protected] 
+0

私はあなたが末尾を持っていることに気づきます ""最初の行に。おそらくコピー過去のエラーですか? –

+0

ああ、無視してください。実際にコピー&ペーストエラー。ありがとう:) – Tony

+4

* "私は、そこに他の文字があると仮定することはできませんが、それは私の人生では見えません。" * 1) 'println 'ステートメント。 2) 'System.out.println("この文字列の長さはどれくらいですか? "+ length.length()); ' –

答えて

7

は、このバリアントを試してみてください:

int test= Integer.parseInt(length.trim()); 
+2

それはそれを並べ替え、ありがとう! バイト13がトリムによって空白としてカウントされたと仮定していますか? – Tony

+0

わかりません。しかし 'trim()'は目に見えない 'String'の大部分を取り除きます。 –

3

この文字列では目に見えない文字があるかもしれません。

私の考え方:Pattern/Matcherで正規表現を使用して、文字列内のすべての非数字を削除し、解析してください。

+0

通常はそうです。しかし、この問題は、余分なキャラクターが何であっても、System.Outに出てこない理由を知ることに非常に興味を持っています。 – Tony

+1

これは、 'System.out.println(Arrays.toString(length.getBytes()));)を発行することでしか見つけられない、印刷不能な制御文字の1つでもありえます; – anubhava

+0

[50、51、13] - 私は思います13はキャリッジリターンですか? – Tony

関連する問題