Kotlin 并使用 padEnd() 两次

Kotlin and use padEnd() twice

我尝试在 String 上使用 padEnd() 两次。 padEnd() 扩展函数第一次按预期工作,但第二次,它没有添加我尝试过的任何字符。

我的代码:

var s = "Hi -> "
s = s.padEnd(10, 'O')
s = s.padEnd(5, ' ')
println(s)

我的输出:

Hi -> OOOO

我正在使用 kotlin 版本 1.2.50。我还尝试 Jetbrains' online compiler 来防止该错误仅出现在我的计算机上,结果相同。我还尝试使用不同版本的 kotlin(1.0.7 和 1.1.60),但仍然相同 feature/bug.

我也尝试使用 padStart(),具有相同的行为,只是将其添加在 String 之前。

混合两个扩展函数也没有按预期工作:使用 padStart() 并紧随其后 padEnd()

这是预期的功能吗?如果是这样,为什么会这样?或者这只是一个错误?

padEnd 不会将给定字符添加到您的 String 给定次数 - 第一个参数是它将填充到的目标长度。来自文档:

Returns a char sequence of length at least length consisting of this char sequence appended with padChar as many times as are necessary to reach that length.

所以在你的第二个电话中,你试图填充 "Hi -> 0000" 直到它至少有 5 个字符长 - 它已经是,所以在它的末尾没有添加空格。

你也可以这样做:

val outerChar =  "*"
val x = outerChar.padEnd(10)
        .plus("hello")
        .plus(outerChar.padStart(10))
println(x)

// Prints:
// *         hello         *

这将在每边的 * 和 hello 之间放置 10 个空格。也尝试交换对 padEnd 和 padStart 的调用。