在Java中多次重复字符串
我试图用java回答下面的面试问题,看起来他们不喜欢我的答案(见下文)。有人可以解释一下为什么它不起作用吗?谢谢大家! 给定一个字符串和一个非负的int n,我们会说字符串的前面是前3个字符,或者如果字符串长度小于3,则不管是什么。返回正面的n份副本在Java中多次重复字符串,java,Java,我试图用java回答下面的面试问题,看起来他们不喜欢我的答案(见下文)。有人可以解释一下为什么它不起作用吗?谢谢大家! 给定一个字符串和一个非负的int n,我们会说字符串的前面是前3个字符,或者如果字符串长度小于3,则不管是什么。返回正面的n份副本 frontTimes("Chocolate", 2) → "ChoCho" frontTimes("Chocolate", 3) → "ChoChoCho" front
frontTimes("Chocolate", 2) → "ChoCho"
frontTimes("Chocolate", 3) → "ChoChoCho"
frontTimes("Abc", 3) → "AbcAbcAbc"
这是我的代码:
public String frontTimes(String str, int n) {
String part = str.substring(0,3);
String result = part.repeat(n);
return result;
}
这就是他们的解决方案:
public String frontTimes(String str, int n) {
int frontLen = 3;
if (frontLen > str.length()) {
frontLen = str.length();
}
String front = str.substring(0, frontLen);
String result = "";
for (int i=0; i<n; i++) {
result = result + front;
}
return result;
}
publicstringfronttimes(stringstr,intn){
int-frontLen=3;
如果(frontLen>str.length()){
frontLen=str.length();
}
字符串前端=str.substring(0,前端);
字符串结果=”;
对于(inti=0;i最基本的,String
没有repeat
方法,因此part.repeat(n)
根本不会编译
还有一个运行时错误是str。如果str
少于3个字符,子字符串(0,3)
将失败
然而,我不认为模型解决方案是完美的
- 他们可以简单地使用
intfrontlen=Math.min(3,str.length());
,这样可读性更好
结果
应累积在StringBuilder
中,以避免重复构建字符串:
StringBuilder sb = new StringBuilder(front.length() * n);
for (int i = 0; i < n; ++i) {
sb.append(front);
}
return sb.toString();
StringBuilder sb=新的StringBuilder(front.length()*n);
对于(int i=0;i
Andy的回答几乎涵盖了错误的内容。但是,您可以简单地编写一些单元测试来检查代码是否按预期工作,而不是询问错误的内容:
@Test
public void testFrontTimesMethod() {
Assert.assertEquals("ChoCho", frontTimes("Chocolate", 2));
Assert.assertEquals("ChoChoCho", frontTimes("Chocolate", 3));
Assert.assertEquals("AbcAbcAbc", frontTimes("Abc", 3));
Assert.assertEquals("AbAbAbAbAbAbAbAbAbAb", frontTimes("Ab", 10));
Assert.assertEquals("", frontTimes("", 5));
}
String.repeat
不是方法,而String.substring(0,3)如果字符串短于3个字符,则
将失败。为面试官不使用StringBuilder
进行评分。存在StringUtils.repeat。此外,如果输入字符串太短,则可以引发异常。我不认为阻止它有什么意义。