我正在寻找一个简单的commons方法或运算符,它允许我将一些字符串重复n次。我知道我可以用for循环来写这个,但是我希望在必要的时候避免for循环,并且应该有一个简单的直接方法。
String str = "abc";
String repeated = str.repeat(3);
repeated.equals("abcabcabc");
有关:
重复字符串javascriptcreate nsstring通过重复另一个字符串给定的次数
编辑
我尽量避免在不完全必要时使用for循环,因为:
它们增加了代码行的数量,即使它们隐藏在另一个函数中。
有人读我的代码必须弄清楚我在for循环中做了什么。即使它被注解并且有有有意义的变量名,他们仍然必须确保它没有做任何“聪明”的事情。
程序员喜欢把聪明的东西放进for循环中,即使我把它写成“只做它想做的事”,这并不妨碍有人来加入一些额外的聪明的“补丁”。
他们往往很容易出错。对于涉及索引的循环,往往只生成一个错误。
for循环经常重用相同的变量,增加了很难找到范围错误的机会。
for循环增加了一个虫子猎人必须寻找的地方的数量。
30条答案
按热度按时间niknxzdl1#
我创建了一个递归方法,可以做你想做的事情。。随便用这个。。。
我有相同的答案,我可以乘字符串在java中重复序列?
yrdbyhpb2#
不是最短的,但(我认为)最快的方法是使用stringbuilder:
ekqde3dh3#
试试这个:
mbzjlibv4#
java 8的
String.join
提供了一种整洁的方法来与Collections.nCopies
:3z6pesqy5#
在java-8中,还可以使用
Stream.generate
.如果需要,您可以用简单的实用方法 Package 它:
lawou6xi6#
如果你关心的是速度,那么你应该使用尽可能少的内存复制。因此需要处理字符数组。
为了测试速度,使用stirngbuilder的类似优化方法如下:
以及测试它的代码:
下面是我系统的运行结果:
注意,对循环的测试是在jit中启动并获得最佳结果。
gywdnpxw7#
为了便于阅读和携带:
lokaqttq8#
使用美元很简单,只需键入:
对数组、列表、集合等也同样适用
jchrr9hc9#
这比你的问题包含的字符少
ux6nzvsh10#
如果您担心性能,只需在循环中使用stringbuilder,并在循环退出时执行.tostring()。见鬼,编写自己的util类并重用它。最多5行代码。
wkftcu5l11#
如果你像我一样,想用谷歌Guava而不是Apache公地。可以在guava strings类中使用repeat方法。
eyh26e7m12#
使用递归,可以执行以下操作(使用三元运算符,最多一行):
我知道,这是丑陋的,可能没有效率,但它是一行!
wgmfuz8q13#
简单的单线解决方案:
需要java 8
ig9co6j114#
根据fortran的回答,这是一个使用stringbuilder的递归版本:
tkclm6bt15#
commons lang stringutils.repeat()
用法: