web-dev-qa-db-ja.com

Kotlinすべての非英数字を削除します

文字列からすべての非英数字を削除しようとしています。

次のように正規表現でreplace()を使用してみました:

var answer = answerEditText.text.toString()
Log.d("debug", answer)
answer = answer.replace("[^A-Za-z0-9 ]", "").toLowerCase()
Log.d("debug", answer)

D /デバッグ:テスト。 、交換

D/debug:テスト。 、交換

句読点文字がまだ存在するのはなぜですか?英数字のみを取得する方法は?

20
Distwo

正規表現オブジェクトを作成する必要があります

var answer = "Test. ,replace"
println(answer)
answer = answer.replace("[^A-Za-z0-9 ]", "") // doesn't work
println(answer)
val re = Regex("[^A-Za-z0-9 ]")
answer = re.replace(answer, "") // works
println(answer)

オンラインで試してください: https://try.kotlinlang.org/#/UserProjects/ttqm0r6lisi743f2dltveid1u9/2olerk6jvb10l03q6bkk1lapjn

37
hasen

私はこれがはるかに簡潔で保守可能だと思います。これらの拡張機能が追加される前に以前の回答が行われた可能性がありますか?

val alphaNumericString = someString.toCharArray()
   .filter { it.isLetterOrDigit() }
   .joinToString(separator = "")
6
Kyle Luce

Kotlinの標準ライブラリはこのように美しいです。次のように String.filterChar.isLetterOrDigit を組み合わせて使用​​します。

val stringToFilter = "A1.2-b3_4C"
val stringWithOnlyDigits = stringToFilter.filter { it.isLetterOrDigit() }
println(stringWithOnlyDigits) //Prints out "A12b34C"
3

正規表現なしで試すことができます、例えば:

val ranges = ('0'..'9') + ('a'..'z') + ('A'..'Z')
val escaped = "1! at __ 2? at 345..0986 ZOk".filter { it in ranges }
0
Sergey Motyrev

私はそれが最も簡単な方法だと思う:

fun String.toNumericString() = this.filter { it.isDigit() }
0
Artem Botnev