2016-04-27 8 views
1

このコードは、char値のIntStreamに文字列をストリームし、個々の値まで追加します。あなたが入力23あなたは5を取得するために期待するかもしれない場合奇妙な結果は、文字列の数字の合計を計算する際

private static int getSumOfDigits(String line) { 
     return line.chars().sum(); 
    } 

を結果として、しかし明らかに私は101を得る。ここで何がうまくいかないのですか?

+4

2 + 3が返されますが、「2」と「3」の合計が50 + 51です。http:// wwwを参照してください。 .asciitable.com /。また、Java文字列には、ASCII以外の文字も含まれていることに注意してください。これは、2バイトを使用するエンコーディング文字です。 – Rames

+2

ダン、私は最初の10のAsciisが文字通りの数字になると思ったが、最初の48文字は特殊文字であることを思い出した。 charsをintに変換するには、Character.getNumericValue(char)が必要です。 – AdHominem

+1

数字が「0」〜「9」の数字になることがわかっている場合は、数値を取得するために「0」を安全に減算することができます。例えば'' 7 ' - ' 0''は7です。 –

答えて

3

@ Martins Seelerが正しいです。文字をintに変換する必要があります:

2

この理由は、それはあなたが追加されている数値ではありません、それは5051で文字23、のASCII値だということ、です。

実際の結果を得るには、java.lang.Character.getNumericValueを使用して、予想される数字に文字を変換できます。

関連する問題