在Java中多次重复一个字符串

时间:2016-02-25 11:12:55

标签: java

我正在尝试回答java中的以下面试问题,看起来他们不喜欢我的回答(见下文),任何人都可以善意地解释为什么它不起作用?谢谢!

  

给定一个字符串和一个非负的int n,我们会说字符串的前面是前三个字符,或者如果字符串小于长度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;
}

2 个答案:

答案 0 :(得分:1)

最根本的是,String没有repeat方法,因此part.repeat(n)根本无法编译。

如果str.substring(0, 3)少于3个字符,str会失败,还会出现运行时错误。

但是,我不会将模型解决方案描述为完美。

  • 他们可以简单地使用int frontLen = Math.min(3, str.length());,它更具可读性。
  • result应该在StringBuilder中累积,以避免重复的字符串构造:

    StringBuilder sb = new StringBuilder(front.length() * n);
    for (int i = 0; i < n; ++i) {
      sb.append(front);
    }
    return sb.toString();
    

答案 1 :(得分:1)

安迪的回答几乎涵盖了不正确的内容。但是,您可以简单地编写一些单元测试来检查代码是否按预期工作,而不是询问哪些不正确:

@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));
}