Kotlin删除所有非字母数字字符

Dis*_*two 24 kotlin kotlin-android-extensions

我试图从字符串中删除所有非字母数字字符.

我尝试使用replace()正则表达式如下:

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

D/debug:测试.,更换

D/debug:测试.,更换

为什么标点字符仍然存在?如何只获取字母数字字符?

has*_*sen 41

您需要创建一个正则表达式对象

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)
Run Code Online (Sandbox Code Playgroud)

在线试用:https://try.kotlinlang.org/#/UserProjects/ttqm0r6lisi743f2dltveid1u9/2olerk6jvb10l03q6bkk1lapjn

  • @AbhijitSarkar不,不是. (3认同)
  • 与`val answer = answerEditText.text.toString()。replace(“ [^ A-Za-z0-9]”。toRegex(),“”).toLowerCase()一起使用 (2认同)
  • 或者 `(?i)[^\\w\\d ]` - 使用 \w 和 \d 进行不区分大小写的检查,而不是手动输入匹配项 (2认同)

Faa*_*hir 10

您需要创建一个正则表达式,这可以str.toRegex()在调用之前完成replace

val string = "AsAABa3a35e8tfyz.a6ax7xe"
string = string.replace(("[^\\d.]").toRegex(), "")
Run Code Online (Sandbox Code Playgroud)

结果:3358.67

如果您需要处理单词 W 和空格

var string = "Test in@@ #Kot$#lin   FaaFS@@#$%^&StraßeFe.__525448=="
    string = string.replace(("[^\\w\\d ]").toRegex(), "")
    println(string)
Run Code Online (Sandbox Code Playgroud)

结果:在 Kotlin FaaFSStraeFe 中测试__525448

  • 更好的!我添加了一行关于 `toRegx()` 作为介绍 (2认同)

Mad*_*ses 9

像这样的Kotlin标准库很漂亮。只需将String.filterChar.isLetterOrDigit结合使用,就像这样:

val stringToFilter = "A1.2-b3_4C"
val stringWithOnlyDigits = stringToFilter.filter { it.isLetterOrDigit() }
println(stringWithOnlyDigits) //Prints out "A12b34C"
Run Code Online (Sandbox Code Playgroud)


小智 8

我发现这更加简洁和可维护。可能是先前的答案是在添加这些扩展名之前做出的吗?

val alphaNumericString = someString.toCharArray()
   .filter { it.isLetterOrDigit() }
   .joinToString(separator = "")
Run Code Online (Sandbox Code Playgroud)


Art*_*nev 6

我认为这是最简单的方法:

fun String.toNumericString() = this.filter { it.isDigit() }
Run Code Online (Sandbox Code Playgroud)


Tia*_*ago 5

fun String.digitsOnly(): String{
    val regex = Regex("[^0-9]")
    return regex.replace(this, "")
}
fun String.alphaNumericOnly(): String{
    val regex = Regex("[^A-Za-z0-9 ]")
    return regex.replace(this, "")
}
Run Code Online (Sandbox Code Playgroud)

用法:

val alphaNumeric = "my string #$".alphaNumericOnly()
Run Code Online (Sandbox Code Playgroud)