【问题标题】:what is this "it <= ' '" in trim string function mean here修剪字符串函数中的“it ​​<=''”是什么意思
【发布时间】:2018-01-20 23:47:36
【问题描述】:

我有这段 Java 代码来修剪字符串

String title = titleEt.getText().toString().trim();

当我转换为 kotlin 时,我希望这应该是 kotlin 代码来修剪前导和尾随空格。

val title = titleEt.text.toString().trim()

但是,IDE 会生成此代码

val title = titleEt.text.toString().trim { it <= ' ' }

这是什么{它

【问题讨论】:

    标签: android kotlin trim


    【解决方案1】:

    Java 的String#trim() 会从字符串的开头和结尾删除'\u0000' (NUL) 和'\u0020' (SPACE) 之间的所有代码点。

    Kotlin 的CharSequence.trim() 默认只删除前导和尾随空格(匹配Char.isWhitespace 的字符,即Character#isWhitespace(char))。对于与 Java 相同的行为,IDE 生成了一个谓词,该谓词与 Java 将修剪的相同字符匹配。

    这些字符包括 ASCII 空格,但也包括控制字符。

    '\u0000' ␀ ('\0')
    '\u0001' ␁
    '\u0002' ␂
    '\u0003' ␃
    '\u0004' ␄
    '\u0005' ␅
    '\u0006' ␆
    '\u0007' ␇ ('\a')
    '\u0008' ␈ ('\b')
    '\u0009' ␉ ('\t')
    '\u000A' ␊ ('\n')
    '\u000B' ␋ ('\v')
    '\u000C' ␌ ('\f')
    '\u000D' ␍ ('\r')
    '\u000E' ␎
    '\u000F' ␏
    '\u0010' ␐
    '\u0011' ␑
    '\u0012' ␒
    '\u0013' ␓
    '\u0014' ␔
    '\u0015' ␕
    '\u0016' ␖
    '\u0017' ␗
    '\u0018' ␘
    '\u0019' ␙
    '\u001A' ␚
    '\u001B' ␛
    '\u001C' ␜
    '\u001D' ␝
    '\u001E' ␞
    '\u001F' ␟
    '\u0020' ␠ (' ')
    

    【讨论】:

      【解决方案2】:

      比较每个字符的 ASCII 哪个 ' ' (空格)。如果字符的 ASCII 小于或等于 ' '(空格)的 ASCII 的 ASCII,则将其删除。

      如果您查看ASCII table,空格下方的符号 (ASCII 32) 是不可打印的控制字符。所以除空格以外的所有可打印字符都在空格的 ASCII(即 32)之上。所以如果去掉 ASCII 小于等于 ' '(空格)的字符,我们会得到剩下的 String 没有前导和尾随空格。

      这就是 Java 的 trim() 的工作原理。不过,您也可以在 Kotlin 中使用 trim()

      titleEt.text.toString().trim()
      

      【讨论】:

        【解决方案3】:

        kotlin 中的trim 函数允许使用谓词,因此 java 代码中的 trim(删除空格)与 .trim { it &lt;= ' ' } 相同 你也可以在 kotlin 中使用.trim()

        【讨论】:

        • 您介意用其他词来解释吗?还是没看懂
        • 当您从 Java 转换为 Kotlin 时,插件会将 java 的 trim() 转换为 .trim{ 它
        【解决方案4】:

        查看采用predicateString.trim 重载。据说从与谓词匹配的字符串中修剪前导字符和尾随字符。在您的情况下,它将修剪小于或等于 ' '(空格)的字符。

        这正是java.lang.String#trim 的工作原理。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-08-28
          • 1970-01-01
          • 2017-12-03
          • 1970-01-01
          • 2013-11-01
          • 2015-01-03
          • 1970-01-01
          • 2018-05-01
          相关资源
          最近更新 更多