【问题标题】:Difference between trim{it <= ' '} and trim in kotlin?kotlin 中 trim{it <= ' '} 和 trim 之间的区别?
【发布时间】:2020-07-08 05:54:24
【问题描述】:

在 kotlin 中修剪删除空间 int 前导和尾随,但是当 android studio 将 java 代码转换为 kotlin ,将 java 中的 trim() 转换为 kotlin 中的 trim{it

【问题讨论】:

    标签: android kotlin trim


    【解决方案1】:

    根据文档:https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.text/trim.html

    fun String.trim(): 字符串 返回删除了前导和尾随空格的字符串。

    it &lt;= ' ' 将删除所有“不可打印”字符,其中ascii code 小于或等于空格(ascii 十进制 = 32)作为回车、换行...

    我刚刚测试了很多这样的字符:

    val kotlin = "\t?\t"
    println(kotlin)
       
    val kotlin2 = "\t?\t".trim()
    println(kotlin2)
       
    val kotlin3 = "\t?\t".trim{it <= ' '}
    println(kotlin3)
    

    这个输出:

        ?  
    ?
    ?
    

    他们都清理了这个字符。正如@AlexeyRomanov 所说,kotlin 将使用isWhitespace 方法返回true 的字符理解为空白字符。所以 it &lt;= ' ' 是让它只修剪与 java 相同的字符,而不是根据 Unicode 标准修剪其他空白字符。

    如果我们测试例如\u00A0 字符:

    val kotlin4 = "\u00A0?\u00A0".trim()
    println(kotlin4)
       
    val kotlin5 = "\u00A0?\u00A0".trim{it <= ' '}
    println(kotlin5)
    

    我们可以看到输出的不同:

    ?
     ? 
    

    您可以在kotlin playground中进行测试。

    【讨论】:

    • 当然他们都删除了\t,它的代码是9 \u0001)
    【解决方案2】:

    Java 的 trim documentation

    否则,如果字符串中没有代码大于'\u0020'的字符,则返回一个表示空字符串的String对象。

    否则,设k为字符串中编码大于'\u0020'的第一个字符的索引,设m为字符串中编码大于'\u0020'的最后一个字符的索引。返回一个String对象,表示这个字符串的子字符串,以索引k处的字符开始,以索引m处的字符结束——即this.substring(k, m + 1)的结果。

    所以条件正好是{ it &lt;= ' ' }(其中it 是字符串中的一个字符)。

    Kotlin 改为 uses

    public fun CharSequence.trim(): CharSequence = trim(Char::isWhitespace)
    

    这是真的,例如对于不间断空格\u00A0、Ogham 空格标记\u1680 等,对于' ' 以下的某些字符(例如\u0001)为false。

    【讨论】:

      猜你喜欢
      • 2022-07-28
      • 2011-12-20
      • 2016-02-08
      • 1970-01-01
      • 1970-01-01
      • 2018-12-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多