このコードは、char値のIntStreamに文字列をストリームし、個々の値まで追加します。あなたが入力23あなたは5を取得するために期待するかもしれない場合奇妙な結果は、文字列の数字の合計を計算する際
private static int getSumOfDigits(String line) {
return line.chars().sum();
}
を結果として、しかし明らかに私は101を得る。ここで何がうまくいかないのですか?
このコードは、char値のIntStreamに文字列をストリームし、個々の値まで追加します。あなたが入力23あなたは5を取得するために期待するかもしれない場合奇妙な結果は、文字列の数字の合計を計算する際
private static int getSumOfDigits(String line) {
return line.chars().sum();
}
を結果として、しかし明らかに私は101を得る。ここで何がうまくいかないのですか?
@ Martins Seelerが正しいです。文字をintに変換する必要があります:
この理由は、それはあなたが追加されている数値ではありません、それは50
と51
で文字2
と3
、のASCII値だということ、です。
実際の結果を得るには、java.lang.Character.getNumericValue
を使用して、予想される数字に文字を変換できます。
2 + 3が返されますが、「2」と「3」の合計が50 + 51です。http:// wwwを参照してください。 .asciitable.com /。また、Java文字列には、ASCII以外の文字も含まれていることに注意してください。これは、2バイトを使用するエンコーディング文字です。 – Rames
ダン、私は最初の10のAsciisが文字通りの数字になると思ったが、最初の48文字は特殊文字であることを思い出した。 charsをintに変換するには、Character.getNumericValue(char)が必要です。 – AdHominem
数字が「0」〜「9」の数字になることがわかっている場合は、数値を取得するために「0」を安全に減算することができます。例えば'' 7 ' - ' 0''は7です。 –