trim字符串函数中的“it <=”'“是什么意思
有一个Java代码来修剪一个字符串
String title = titleEt.getText().toString().trim();
当盖kotlin,我认为这应该是修剪领先空间和尾部空间的kotlin代码。
val title = titleEt.text.toString().trim()
但IDE生成此代码
val title = titleEt.text.toString().trim { it <= ' ' }
这是什么呢?它在这里是什么字符,而不是“”?
Java的String#trim()
从字符串的开始和结尾删除'\u0000'
(NUL)和'\u0020'
(空格)之间'\u0000'
所有代码点。
Kotlin的CharSequence.trim()
仅删除前导和尾随空白(与Char.isWhitespace
匹配的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' ␠ (' ')
kotlin中的trim函数允许在java代码中修剪谓词(移除空格)与.trim { it <= ' ' }
您也可以在kotlin中使用.trim()
请参阅使用predicate
的String.trim
重载。 据说修剪符合谓词的字符串中的前导和尾随字符。 在你的情况下,它将修剪小于或等于' '
(空格)的字符。
这正是java.lang.String#trim
工作方式。
它比较每个字符的''(空格)的ASCII。 如果字符的ASCII小于或等于“(空格)”的ASCII码,则将其删除。
如果您查看ASCII表格 ,空格下方的符号(ASCII 32)是不可打印的控制字符。 所以除空格以外的所有可打印字符都在空格的ASCII码(32)之上。 所以如果ASCII码小于或等于''(空格)的字符被删除,我们将得到剩余的字符串,而不会引导和结尾的空白。
这是Java的trim()
工作原理。 不过,你也可以在Kotlin中使用trim()
:
titleEt.text.toString().trim()