web-dev-qa-db-ja.com

CharをIntに変換するにはどうすればよいですか?

"82389235"のように見えるStringの整数がありますが、それを反復処理して各数値をMutableListに個別に追加したかったのです。しかし、私がそれを扱うとき、私がそれを扱う方法だと思うとき:

var text = "82389235"

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

これにより、文字列とはまったく関係のない数字がリストに追加されます。それでも、printlnを使用してコンソールに出力すると、文字列を完全に繰り返し処理します。

CharIntに適切に変換するにはどうすればよいですか?

13
ibroadsword

これは、numCharであるためです。つまり、結果の値はそのcharのASCII値です。

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

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

mapはさらに簡略化できます。

map(Character::getNumericValue)
22
s1m0nw1

JVMでは、効率的な Java.lang.Character.getNumericValue() が利用可能です。

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

変数numChar型です。これでtoInt()を呼び出すと、ASCIIコードが返されます。これがリストに追加されます。

数値を追加する場合は、各桁からASCII 0のコードを引くだけです。

_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())
_
4
zsmb13