public String someMethod(int x,char y){
String result="";
for (int i=0;i<x;i++) result+=y;
return result;
}
我试图弄明白,有没有办法在一行中做同样的事情,没有循环。例如:
public String someMethod(int x,char y){
return new StringBuilder().append('y', x);
}
但是StringBuilder或StringBuffer等没有这样的方法。你能给我任何建议吗?提前谢谢。
更新 所以,解决方案将是:
public String someMethod(int x,char y){
return new String(new char[x]).replace("\0", String.valueOf(y))
}
感谢您的帮助!
答案 0 :(得分:1)
试试这个。在这里,我们生成一个新的char[]
,默认初始化为所有0
,然后用我们想要的字符替换这些0
。
public class B {
public static void main(String[] args) {
int x = 5;
String y = "h";
String result = new String(new char[x]).replace("\0", y);
System.out.println(result);
}
}
答案 1 :(得分:1)
你可以做到
import java.util.Arrays;
public String someMethod(int x,char y){
char[] a = new char[x];
Arrays.fill(a, 0, x, y);
return new String(a);
}
答案 2 :(得分:1)
正如其他人所说,完全没有循环是不可能的 - 你可以将它隐藏在其他方法之后,但它们仍然使用循环。
如果它仅仅是为了“更紧凑”的代码,你可以编写自己的方法来做到这一点 - 或者你使用第三方库,如Apache Commons StringUtils:StringUtils.repeat(String str, int repeat)
应该做的工作
答案 3 :(得分:0)
使用StringBuffer&amp;循环,没有循环,这是不可能完成的 即使你找到了一种方法,可以在没有循环的情况下完成它,在它内部仍然使用循环。
答案 4 :(得分:0)
public String someMethod(int x,char y) {
StringBuilder buff = new StringBuilder();
return someMethod( x, y, buff );
}
public String someMethod(int x,char y, StringBuilder buff) {
if (x == 0) return buff.toString();
else {
buff.append( y );
return someMethod( x, y, buff );
}
}
...但如果这不是一个谜题,递归并不比循环更好......
另一方面,当有人想要删除循环比较某些String实现的函数(在本例中为new String(char[])
和replace()
)
答案 5 :(得分:0)
对于java 8,您可以使用流:
Stream.generate(() -> String.valueOf(y))
.limit(x)
.collect(Collectors.joining()).toString()
答案 6 :(得分:0)
将近5年后回答我自己的问题。
在Java 11中,可以按照以下步骤进行操作:
public String someMethod(int x, char y) {
return String.valueOf(y).repeat(x);
}