Наличие java-кода для обрезки строки
String title = titleEt.getText().toString().trim();
при обложке kotlin, я думал, что это должен быть код kotlin, чтобы обрезать ведущее пространство и конечное пространство.
val title = titleEt.text.toString().trim()
но IDE генерирует этот код
val title = titleEt.text.toString().trim { it <= ' ' }
Что здесь такое, это какой-то символ меньше, чем?
String#trim()
удаляет все кодовые точки между '\u0000'
(NUL) и '\u0020'
(SPACE) из начала и конца строки.
Kotlin's CharSequence.trim()
по умолчанию удаляет только 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' ␠ (' ')
функция trim в kotlin позволяет предикат, так что обрезка в java-коде (удаляет белые пробелы) такая же, как .trim { it <= ' ' }
Вы можете использовать .trim()
в kotlin тоже
См. Перегрузку String.trim
которая берет predicate
. Говорят, что он обрезает ведущие и конечные символы от строки, которая соответствует предикату. В вашем случае он обрезает символы, которые меньше или равны ' '
(пробелы)».
Это как раз работает java.lang.String#trim
.
Он сравнивает ASCII каждого символа, который '' (пробел). Если ASCII символа меньше или равно ASCII в '' (пробеле), он удаляется.
Если вы посмотрите на таблицу ASCII , символы ниже пространства (ASCII 32) являются непечатаемыми управляющими символами. Таким образом, все печатаемые символы, кроме пробела, находятся над ASCII пространства (что равно 32). Поэтому, если символы, ASCII которых меньше или равны значению '' (пробела), удаляются, мы получим оставшуюся строку без начального и конечного пробелов.
Так работает trim()
Java. Тем не менее, вы можете просто использовать trim()
также в Kotlin:
titleEt.text.toString().trim()