2017-12-01 11 views
3

Stringの整数は"82389235"のように見えますが、それを繰り返して各数値を個別にMutableListに追加したいと考えました。CharをIntに変換するにはどうすればよいですか?

var text = "82389235" 

for (num in text) numbers.add(num.toInt()) 

これは、リストに文字列とは全く無関係の数字が追加されています。しかし、私はそれについて、私はそれが処理されると思う道を行くとき。それでも、私がprintlnを使用してコンソールに出力すると、文字列を完全にうまく反復処理します。

CharIntに正しく変換するにはどうすればよいですか?

+0

ようこそ。 [尋ねる]と[ツアー]を読んでみてください。 – Bugs

答えて

3

これは、numCharであるためです。結果の値は、その文字のASCII値です。

これは、トリックを行います:

val txt = "82389235" 
val numbers = txt.map { it.toString().toInt() } 

mapも、このように単純化することができます。

map(Character::getNumericValue) 
+0

ありがとうございます。私は非常に混乱していた。 – ibroadsword

+1

Kotlinでは、このタスクを達成するために明示的な反復を必要としないことに注意してください。これはKotlinの慣用的な方法です "82389235" .toMutableList(); ' –

+0

これを指摘してくれてありがとう。私はそれに応じてそれを修正した – s1m0nw1

3

変数numがタイプCharです。これに対してtoInt()を呼び出すと、そのASCIIコードが返され、それがリストに追加されます。

あなたが数値を追加したい場合は、あなただけの各桁から0のASCIIコードを引くことができます。

このようなビット進歩して
numbers.add(num.toInt() - '0'.toInt()) 

val zeroAscii = '0'.toInt() 
for(num in text) { 
    numbers.add(num.toInt() - zeroAscii) 
} 

これは動作しますmapの操作もありますので、MutableListを作成する必要はありません。

val zeroAscii = '0'.toInt() 
val numbers = text.map { it.toInt() - zeroAscii } 

String.toInt()が実際に番号を解析するため、また、あなたは、Stringに個別に各文字を変換することができ - これはしかし作成したオブジェクトの面で少し無駄なようだ:

numbers.add(num.toString().toInt()) 
3

JVM上で利用できる効率的なjava.lang.Character.getNumericValue()があります:

val numbers: List<Int> = "82389235".map(Character::getNumericValue) 
+0

あなたはその質問に間違った答えにリンクしているようだ、私はあなたが気にしない場合はそれを変更しました – Moira

関連する問題