【问题标题】:Can´t find the mistake in this code, Comparator在这段代码中找不到错误,比较器
【发布时间】:2020-11-28 21:35:23
【问题描述】:

我有一个在 JFrame 中实现比较器方法的类,由于某种原因,当你两次输入相同的名称时,程序会下降并打印这个 --> 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);
}

}

【问题讨论】:

标签: java comparator


【解决方案1】:

这段代码,当遇到相同的字符串时,

while(i<PalabraA.length() && i<PalabraB.length() && PalabraA.charAt(i) == PalabraB.charAt(i)){    
    i++;
}

将退出循环,i 等于字符串的长度。然后你执行这个:

return PalabraA.charAt(i) - PalabraB.charAt(i);

保证会抛出越界异常,因为有效索引从 0 运行到 length-1。

【讨论】:

    【解决方案2】:

    This other Answer 描述了您的具体问题和解决方案。

    你似乎工作太努力了。只需让两个字符串进行比较即可。

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

    【讨论】:

    • equalsIgnoreCase 返回一个布尔值,对吧?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-22
    • 1970-01-01
    • 2013-04-12
    相关资源
    最近更新 更多