gpt4 book ai didi

string - 将段落拆分为字符串列表,每个字符串不超过给定的大小并避免将单词分成两半

转载 作者:行者123 更新时间:2023-12-02 12:38:57 24 4
gpt4 key购买 nike

问题

如何以惯用的方式完成以下操作:将一个大的 String 拆分为一个 String 列表,每个字符串不超过给定的大小,并避免将单词分成两半。

最接近String.chunked()(拆分单词)的解决方案

与此最接近的解决方案是使用 String 类的 chunked() 方法。然而,这样做的问题是它拆分给定 String 中的单词。

使用String.chunked()的代码示例

val longString = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod " +
"tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, " +
"quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo " +
"consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse " +
"cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non " +
"proident, sunt in culpa qui officia deserunt mollit anim id est laborum. "

// Split [longString] into list
var listOfStrings = longString.chunked(40)
listOfStrings.forEach {
println(it)
}

使用 String.chunked() 的最接近示例的示例输出

下面是通过运行所提供的示例代码收到的输出。可以看出,单词在行尾被拆分。

Lorem ipsum dolor sit amet, consectetur
adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna ali
qua. Ut enim ad minim veniam, quis nostr
ud exercitation ullamco laboris nisi ut
aliquip ex ea commodo consequat. Duis au
te irure dolor in reprehenderit in volup
tate velit esse cillum dolore eu fugiat
nulla pariatur. Excepteur sint occaecat
cupidatat non proident, sunt in culpa qu
i officia deserunt mollit anim id est la
borum.

最佳答案

这不是我发现的最惯用的方式,但也许它能满足您的需求:

fun String.chunkedWords(limitChars: Int,
delimiter: Char = ' ',
joinCharacter: Char = '\n') =
splitToSequence(delimiter)
.reduce { cumulatedString, word ->
val exceedsSize = cumulatedString.length - cumulatedString.indexOfLast { it == joinCharacter } + "$delimiter$word".length > limitChars
cumulatedString + if (exceedsSize) {
joinCharacter
} else {
delimiter
} + word
}

然后您可以按如下方式使用它:

longText.chunkedWords(40).run(::println)

然后对于给定的字符串将打印:

Lorem ipsum dolor sit amet, consectetur
adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna
aliqua. Ut enim ad minim veniam, quis
nostrud exercitation ullamco laboris
nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit
in voluptate velit esse cillum dolore eu
fugiat nulla pariatur. Excepteur sint
occaecat cupidatat non proident, sunt in
culpa qui officia deserunt mollit anim
id est laborum.

你也可以从那里把它分成几行,例如longText.chunkedWords(40).splitAsSequence("\n")。请注意,如果字符串中已经有换行符,它也可以很好地拆分,即如果你有一个 String"Testing shorter lines.\nAnd now there comes a very long line" 调用 .chunkedWords(17) 将产生以下输出:

Testing shorter
lines.
And now there // this tries to use the whole 17 characters again
comes a very
long line

关于string - 将段落拆分为字符串列表,每个字符串不超过给定的大小并避免将单词分成两半,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53434185/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com