我有自定义比较方法:
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。我看不出我出错了!
答案 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教程