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

时间:2017-08-29 02:09:16

标签: kotlin kotlin-android-extensions

我正在尝试从字符串中删除所有非字母数字字符。

我尝试将a <-70 outer <- function(){ a <<- 20 inner <- function(){ a <<- 30 print(a) } # end of inner function inner() print(a) } # end of outer function 与正则表达式一起使用,如下所示:

> outer()
   30
   20
> a
  70 
  

D / debug:测试。 ,取代

     

D / debug:测试。 ,取代

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

8 个答案:

答案 0 :(得分:30)

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

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

答案 1 :(得分:10)

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

    public Class1 GetAppSettings()
    {
        Class1 result = new Class1();

        //  Code does something

        return result;
    }

    public Class2 GetAppSettings()
    {
        Class2 result = new Class2();

        //  Code does something

        return result;
    }

答案 2 :(得分:3)

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

val string = "AsAABa3a35e8tfyz.a6ax7xe"
string = string.replace(("[^\\d.]").toRegex(), "")

结果:3358.67

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

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

结果:在Kotlin FaaFSStraeFe__525448中进行测试

答案 3 :(得分:2)

Kotlin认为您可以替换字符串,而不是regex,因此您应该提供一些帮助以regex作为第一个参数来选择正确的方法签名。

显式使用Regex类型而不是字符串:

"[^A-Za-z0-9 ]".toRegex()

或告诉您正在传递命名的regex参数:

answer.replace(regex = "[^A-Za-z0-9 ]", "")

在这种情况下,除非您传递真实的正则表达式而不是字符串,否则kotlin不会编译

答案 4 :(得分:0)

您可以尝试不使用正则表达式,例如:

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

答案 5 :(得分:0)

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

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

答案 6 :(得分:0)

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

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

答案 7 :(得分:0)

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, "")
}

用法:

val alphaNumeric = "my string #$".alphaNumericOnly()