文字列からすべての非英数字を削除しようとしています。
次のように正規表現で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:テスト。 、交換
句読点文字がまだ存在するのはなぜですか?英数字のみを取得する方法は?
正規表現オブジェクトを作成する必要があります
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
私はこれがはるかに簡潔で保守可能だと思います。これらの拡張機能が追加される前に以前の回答が行われた可能性がありますか?
val alphaNumericString = someString.toCharArray()
.filter { it.isLetterOrDigit() }
.joinToString(separator = "")
Kotlinの標準ライブラリはこのように美しいです。次のように String.filter と Char.isLetterOrDigit を組み合わせて使用します。
val stringToFilter = "A1.2-b3_4C"
val stringWithOnlyDigits = stringToFilter.filter { it.isLetterOrDigit() }
println(stringWithOnlyDigits) //Prints out "A12b34C"
正規表現なしで試すことができます、例えば:
val ranges = ('0'..'9') + ('a'..'z') + ('A'..'Z')
val escaped = "1! at __ 2? at 345..0986 ZOk".filter { it in ranges }
私はそれが最も簡単な方法だと思う:
fun String.toNumericString() = this.filter { it.isDigit() }