Java 返回包含X个重复字符且无循环的字符串
我卡住了一点。我有一个方法,它应该返回一个包含X次重复字符“y”的新字符串。X和Y是方法的参数。简单的解决方案如下:Java 返回包含X个重复字符且无循环的字符串,java,string,Java,String,我卡住了一点。我有一个方法,它应该返回一个包含X次重复字符“y”的新字符串。X和Y是方法的参数。简单的解决方案如下: public String someMethod(int x,char y){ String result=""; for (int i=0;i<x;i++) result+=y; return result; } 但是对于StringBuilder或StringBuffer等没有这样的方法。你能给我一些建议吗?提前谢谢 更新: 因此,解决
public String someMethod(int x,char y){
String result="";
for (int i=0;i<x;i++) result+=y;
return result;
}
但是对于StringBuilder或StringBuffer等没有这样的方法。你能给我一些建议吗?提前谢谢
更新:
因此,解决方案将是:
public String someMethod(int x,char y){
return new String(new char[x]).replace("\0", String.valueOf(y))
}
谢谢你的帮助 使用StringBuffer&loop,如果没有loop,则无法执行此操作。
即使您发现了一种方法,它可以在没有循环的情况下完成,但在它的内部仍然使用循环。使用StringBuffer&loop,没有循环,这是无法完成的。
即使你找到了一种不用循环就能完成的方法,但在它的内部仍然使用循环。试试这个。这里我们生成一个新的
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);
}
}
试试这个。这里我们生成一个新的
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);
}
}
…但如果这不是一个难题,递归并不比循环好
另一方面,与某些字符串实函数相比,当有人想要删除循环时(在本例中为newstring(char[])
和replace()
),递归更为普遍
…但如果这不是一个难题,递归并不比循环好
另一方面,当有人想要删除循环而不是某些字符串实函数时(在本例中是newstring(char[])
和replace()
)递归更为普遍
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);
}
你能行
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);
}
正如其他人所说,完全没有循环是不可能的——您可以将它隐藏在其他方法后面,但它们仍然使用循环 如果只是为了“更紧凑”的代码,您可以编写自己的方法来实现这一点,或者使用第三方lib,如apachecommons StringUtils:
StringUtils.repeat(String str,int repeat)
应该完成这项工作
正如其他人所说,没有循环是不可能完全实现的——你可以将它隐藏在其他方法后面,但它们仍然使用循环 如果只是为了“更紧凑”的代码,您可以编写自己的方法来实现这一点,或者使用第三方lib,如apachecommons StringUtils:
StringUtils.repeat(String str,int repeat)
应该完成这项工作
对于java 8,您可以使用流:
Stream.generate(() -> String.valueOf(y))
.limit(x)
.collect(Collectors.joining()).toString()
对于java 8,您可以使用流:
Stream.generate(() -> String.valueOf(y))
.limit(x)
.collect(Collectors.joining()).toString()
五年后,我回答了自己的问题 在Java 11中,可以按如下方式执行:
public String someMethod(int x, char y) {
return String.valueOf(y).repeat(x);
}
五年后,我回答了自己的问题 在Java 11中,可以按如下方式执行:
public String someMethod(int x, char y) {
return String.valueOf(y).repeat(x);
}
有什么理由不需要循环就可以完成吗?任何内置函数,如果它存在的话,最有可能使用循环。只是为了简化(使代码更紧凑)。这不是一个很好的理由,请使用循环。如果我看一下你的代码,我会开始想“s/he试图实现什么”,然后是“为什么没有循环?一定有原因”。如果您只使用循环(同时避免连接-使用StringBuilder),那么很明显您正在尝试做什么,这是通常的方法。有什么原因必须在没有循环的情况下完成吗?任何内置函数,如果它存在的话,最有可能使用循环。只是为了简化(使代码更紧凑)。这不是一个很好的理由,请使用循环。如果我看一下你的代码,我会开始想“s/he试图实现什么”,然后是“为什么没有循环?一定有原因”。如果您只想使用循环(同时避免连接-使用StringBuilder),那么很明显您要做的是,这是通常的方法。@user3523579,我只是更新了它,使用变量而不是文字,但这是一样的。比这更简单:创建
char[]
并使用Arrays.fill()
@fge,Arrays.fill()
返回void
,这样至少需要三行(一行声明char[]
,一行填充,一行生成字符串),其中我的解决方案需要一行。@user3523579,我刚刚更新它以使用变量而不是文本,但这是同一件事。还有比这更简单的事情:创建一个char[]
并使用Arrays.fill()
@fge,Arrays.fill()
返回void
,这样至少需要三行(一行声明char[]
,一行填充,一行生成字符串),我的解决方案需要一行代码。