Разница между отделкой {it <= ''} и отделкой в ​​kotlin? - PullRequest
2 голосов
/ 27 марта 2020

обрезать в kotlin удалить пробел в начале и в конце, но когда android studio преобразует java код в kotlin, преобразуйте trim () в java в обрезку {it <= ''} в kotlin когда меняли это на обрезку, это не имело никакого значения. какая разница между отделкой и отделкой {it <= ''} ?? </p>

Ответы [ 2 ]

3 голосов
/ 27 марта 2020

Согласно документам: https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.text/trim.html

fun String.trim (): String Возвращает строку с удаленными начальными и конечными пробелами.

it <= ' ' удалит все «непечатные» символы с кодом ascii , меньшим или равным пробелу (десятичный ascii = 32) в качестве возврата каретки, перевода строки ...

Но я только что проверил со многими из этих символов:

val kotlin = "\t?\t"
println(kotlin)

val kotlin2 = "\t?\t".trim()
println(kotlin2)

val kotlin3 = "\t?\t".trim{it <= ' '}
println(kotlin3)

это выводит:

    ?  
?
?

Они оба очищают эти символы. И благодаря @AlexeyRomanov я нашел то, что kotlin понимает как символ пробела в isWhitespace документах. Таким образом, it <= ' ' должен сделать так, чтобы он обрезал только те же символы, что и java, а не другие пробельные символы в соответствии со стандартом Unicode.

Если мы протестируем, например, символ \u00A0:

val kotlin4 = "\u00A0?\u00A0".trim()
println(kotlin4)

val kotlin5 = "\u00A0?\u00A0".trim{it <= ' '}
println(kotlin5)

мы видим разницу в выходе:

?
 ? 

Вы можете проверить это на kotlin детской площадке .

2 голосов
/ 27 марта 2020

Java s trim документация говорит

В противном случае, если в строке нет символа с кодом больше '\ u0020', тогда Возвращается строковый объект, представляющий пустую строку.

В противном случае, пусть k будет индексом первого символа в строке, код которого больше, чем \ u0020, и пусть m будет индексом последнего символа в строка, код которой больше, чем '\ u0020'. Возвращается объект String, представляющий подстроку этой строки, которая начинается с символа с индексом k и заканчивается символом с индексом m, то есть является результатом этой строки (k, m + 1).

Таким образом, условие в точности равно { it <= ' ' } (где it - символ в строке).

Kotlin вместо используется

public fun CharSequence.trim(): CharSequence = trim(Char::isWhitespace)

, что верно, например, для неразрывного пробела \u00A0, знак пробела Огама \u1680 и т. Д. c. и false для некоторых символов ниже ' ' (например, \u0001).

...