自定义比较字符串方法抛出indexarrayoutofbounds

时间:2014-11-03 20:15:48

标签: java

我有自定义比较方法:

public int compareStrings(String one, String two) {
    int compareAmount = 0;
    if (one.length() == two.length()) {
        compareAmount++;
    } else {
        compareAmount--;
    }
    int x = 0;
    for (char i : one.toCharArray()) {
        if (!(x > two.length())) {
            if (two.charAt(x) == i) {
                compareAmount++;
            }
            x++;
        }
    }
    return compareAmount;
}

如果第一个字符串是“Ok”而字符串二是“让它一试”它会抛出java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:2。我看不出我出错了!

3 个答案:

答案 0 :(得分:1)

您将一直前往two.length(),而不是停留在two.length() - 1。这不起作用,因为数组是从0..length()-1索引的。
只需更改循环内的if条件即可解决问题:

if (!(x >= two.length())) {

答案 1 :(得分:0)

如果String 2的长度为11,则最后一个索引为10.您只是检查x是否不大于2的长度。但它可能是平等的,是超出界限的。只需将其更改为> =

即可

答案 2 :(得分:0)

首先,Dude不会重新实现这种算法。

使用String类中定义的compareTo(String)方法。

您还可以从JDK源代码中学习并了解它们如何实现此方法http://hg.openjdk.java.net/jdk7u/jdk7u6/jdk/file/8c2c5d63a17e/src/share/classes/java/lang/String.java#l1096

如果需要特定类的自定义比较器,则必须实现Comparator接口。

如果你开始学习java并想要擅长它。至少要完整阅读oracle的官方Java教程