在Java中多次重复字符串

在Java中多次重复字符串,java,Java,我试图用java回答下面的面试问题,看起来他们不喜欢我的答案(见下文)。有人可以解释一下为什么它不起作用吗?谢谢大家! 给定一个字符串和一个非负的int n,我们会说字符串的前面是前3个字符,或者如果字符串长度小于3,则不管是什么。返回正面的n份副本 frontTimes("Chocolate", 2) → "ChoCho" frontTimes("Chocolate", 3) → "ChoChoCho" front

我试图用java回答下面的面试问题,看起来他们不喜欢我的答案(见下文)。有人可以解释一下为什么它不起作用吗?谢谢大家!

给定一个字符串和一个非负的int n,我们会说字符串的前面是前3个字符,或者如果字符串长度小于3,则不管是什么。返回正面的n份副本

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。此外,如果输入字符串太短,则可以引发异常。我不认为阻止它有什么意义。