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()

请参阅使用predicateString.trim重载。 据说修剪符合谓词的字符串中的前导和尾随字符。 在你的情况下,它将修剪小于或等于' ' (空格)的字符。

这正是java.lang.String#trim工作方式。

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

如果您查看ASCII表格 ,空格下方的符号(ASCII 32)是不可打印的控制字符。 所以除空格以外的所有可打印字符都在空格的ASCII码(32)之上。 所以如果ASCII码小于或等于''(空格)的字符被删除,我们将得到剩余的字符串,而不会引导和结尾的空白。

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

 titleEt.text.toString().trim() 
Interesting Posts