我可以用 Guava 将文本换行到给定宽度吗?
我希望能够将长字符串包装为固定长度。有没有办法在 Guava 中做到这一点?
Apache Commons / Lang 具有方法 WordUtils.wrap(String, length)
的作用正是如此我需要。 Guava 有一个简单的方法来实现这一点吗?
我知道我可以使用 Splitter.fixedLength(int)
,但我想要一个软包装。
更新:这个问题现在有一个悬赏。
显然,这个功能在开箱即用的 Guava 中不可用,因此赏金将奖励给使用 Guava 中的内容的最简洁(或最完整)和类似 Guava 的答案。除番石榴外,不允许使用任何库。
I would like to be able to wrap a long String to a fixed length. Is there a way to do that in Guava?
Apache Commons / Lang has the method WordUtils.wrap(String, length)
that does exactly what I need. Does Guava have a simple means to accomplish this?
I know I can do a hard wrap using Splitter.fixedLength(int)
, but I would like a soft wrap.
UPDATE: There is now a bounty for this question.
Obviously this functionality isn't available in Guava out of the Box, so the bounty goes to the most concise (or most complete) and Guava-like answer that uses what's there in Guava. No libs except Guava allowed.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我们(Guava)强烈建议您使用 ICU4J 的
BreakIterator
类来处理在用户文本中查找断点的机制。We (Guava) strongly recommend you use ICU4J's
BreakIterator
class to handle the mechanics of finding break points in user text.这是我自己的答案,仅供参考:
示例用法 1:(80 个字符处的硬包装)
输出:
示例用法 2:(60 个字符或之前的软包装)字符,保留现有换行符)
输出:
Here's my own answer, for inspiration:
Sample Usage 1: (hard wrapping at 80 chars)
Output:
Sample Usage 2: (soft wrapping at or or before 60 chars, keep existing line breaks)
Output:
为什么使用番石榴做一些更简单的事情而不使用番石榴?
事实上,
Splitter
类允许您使用fixedLength()
方法进行硬包装,否则您可以根据分隔符char
或String
拆分字符串。如果你想使用 guava,你可以依赖Splitter.on(' ').split(string)
,但你还必须根据 maxLength 将 ' ' 替换为 '\n' 来连接结果价值。不用番石榴,你也可以做你想做的事。几行代码,无依赖项。基本上,您可以使用 commons-lang 方法来简化它。这是我的换行方法:
是的,它与原始的 commons-lang 方法非常相似,但我想它更短、更容易并且基于您的需求。也许,这个解决方案也比你的更有效,不是吗?
我已经用您的文本对其进行了测试,并将我的结果与 commons-lang 结果进行了比较。它似乎有效:
所以,问题是:你真的想用番石榴来做到这一点吗?与此选择相关的好处是什么?
why use guava to do something more simple without guava?
In fact, the
Splitter
class allows you to do an hard wrap usingfixedLength()
method, otherwise you can split a string depending on a separatorchar
orString
. If you want to use guava, you can rely onSplitter.on(' ').split(string)
, but you have also to join the results replacing ' ' with '\n' depending on maxLength value.Without using guava, you can also do what you want. A few lines of code, with no dependencies. Basically, you can use the commons-lang approach, simplifying it. This is my wrap method:
Yes, it's very similar to the original commons-lang method, but shorter, easier and based on your needs, I guess. Maybe, this solution is also more efficient than yours, isn't it?
I've tested it with your text, comparing my result with commons-lang result. It seems to work:
So, the matter is: do you really want to use guava to do this? What are the benefits related to this choice?
我这样做是为了好玩,只是为了尽可能多地用番石榴做事。不过 javaanna 的答案更好,
I did this for fun just to do as much in guava as possible. javanna's answer is better though,