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' ␠ (' ')
查看采用 predicate
的 String.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()
我有这个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' ␠ (' ')
查看采用 predicate
的 String.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()