我有一个类,它在JFrame中实现了comparator方法,由于某种原因,当你两次输入相同的名称时,程序就会失败并打印出来-->StringIndexOutOfBoundsException
方法代码:
public class OrdenarCrecienteTecnico implements Comparator<Tecnico> {
@Override
public int compare(Tecnico a, Tecnico b) {
String PalabraA = a.getNombre().toUpperCase();
String PalabraB = b.getNombre().toUpperCase();
int i = 0;
while(i<PalabraA.length() && i<PalabraB.length() && PalabraA.charAt(i) == PalabraB.charAt(i)){
i++;
}
return PalabraA.charAt(i) - PalabraB.charAt(i);
}
}
此代码,当面对相同的字符串时,
while(i<PalabraA.length() && i<PalabraB.length() && PalabraA.charAt(i) == PalabraB.charAt(i)){
i++;
}
将在CCD_ 1等于字符串长度的情况下退出循环。然后你执行这个:
return PalabraA.charAt(i) - PalabraB.charAt(i);
这保证会抛出越界异常,因为有效索引从0到长度-1。
另一个答案描述了您的具体问题和解决方案。
你似乎工作太努力了。只需让两个字符串进行比较。
public class OrdenarCrecienteTecnico implements Comparator<Tecnico> {
@Override
public int compare(Tecnico a, Tecnico b) {
if( Objects.isNull( a ) || Objects.isNull( b ) ) { return -1 ; }
return a.getNombre().compareToIgnoreCase( a.getNombre() ) ;
}