this "it <= ' '" in trim string function 在这里是什么意思

what is this "it <= ' '" in trim string function mean here

我有这个Java代码到trim一个字符串

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

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

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

但是,IDE 生成此代码

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

这里的 { it <= ' ' } 是什么?是否有小于 ' ' 的字符?

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

Kotlin 的 CharSequence.trim() removes only leading and trailing whitespace by default (characters matching Char.isWhitespace, which is Character#isWhitespace(char))。对于与 Java 相同的行为,IDE 生成了一个谓词,该谓词匹配 Java 会修剪的相同字符。

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

'\u0000' ␀ ('[=10=]')
'\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' ␠ (' ')

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

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

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

它正在比较 ' ' (space) 中每个字符的 ASCII。如果字符的 ASCII 小于或等于 ' ' (space) 的 ASCII,则将其删除。

如果您查看 ASCII table,下面的符号 space (ASCII 32) 是不可打印的控制字符。所以除 space 之外的所有可打印字符都在 space 的 ASCII(即 32)之上。所以如果去掉ASCII小于或等于''(space)的字符,我们将得到剩下的没有前导和尾随白色的字符串space.

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

titleEt.text.toString().trim()