拆分和比较一个字符串(Java)

时间:2018-07-07 19:35:36

标签: java string

一段时间以来,我一直在测试其他方法,这就是我得到的。我只是不知道如何解决这个问题。

/** Return true iff s has an odd number of characters and
 *  the substring before the middle character equals the substring
 *  after it.
 * Examples: For s = "" return false
 * For s = "b" return true
 * For s = "xbx" return true
 * For s = "xxxx" return false
 * For s = "hellohello" return false
 * For s = "hello!hello" return true */
public static boolean isDoubled(String s) {
    // TODO 1. There is no need for a loop. Do not use a loop.
    // In all methods, use s1.equals(s2) and NOT s1 == s2 to test
    // equality of s1 and s2.
    int midLen = s.length() / 2;
    if (midLen == 0) return false;
    String[] parts = {s.substring(0, midLen - 1), s.substring(midLen + 1)};
    String part1 = parts[0];
    String part2 = parts[1];
    if ((s.length() % 2 == 0) && (part1.equals(part2))) {
        return true;
    }
    return false;
}

3 个答案:

答案 0 :(得分:1)

两个简单的错误:

  • if-statement中,如果要确定长度不是,则长度是否为偶数。 (将(s.length() %2===0)更改为!(s.length() %2 == 0)

  • 并且substring函数不包含在内,因此您想将s.substring(0, mid-1)更改为s.substring(0, mid)

    (从docs:“ 子字符串开始于指定的beginIndex,并扩展到索引endIndex-1处的字符。” “)

此外,您无需将array的两个部分放入变量中。您可以简单地将它们进行比较,例如:     parts[0].equals(parts[1])

答案 1 :(得分:1)

当您将两个索引(a,b)传递给子字符串方法时,该方法包括索引,但不包括索引b。从数学上讲,它是[a,b)。如果考虑字符串“ hello!hello”,则mid将是索引5。当您说-

String[] parts = {s.substring(0, midLen - 1), s.substring(midLen + 1)};

您将获得的两个部分是

s.substring(0, 4) //this gets you the string "hell"
s.substring(6)    //this gets you the string "hello"

显然,它们不匹配。导致错误的对等。

您需要做的是一点零钱-

String[] parts = {s.substring(0, midLen), s.substring(midLen + 1)};

答案 2 :(得分:0)

使用substring函数有误:

public static boolean isDoubled(String s) {
    if (s.length() % 2 == 0)
        return false;
    if (s.length() == 1)
        return true;

    int mid = s.length() / 2;
    return s.substring(0, mid).equals(s.substring(mid + 1));
}