CompareTo(Object o)用于比较java中的字符串

时间:2014-11-09 19:12:18

标签: java string object compareto

在我的程序中,我试图按姓氏比较名称,如果它们相同,则使用名字进行比较。但是,我无法弄清楚如何比较字符串。

有人可以帮我解决这个问题吗?

public class Student implements IComparable
{
String firstName;
String lastName;
int score;

public Student()
{

}

public void setFirstName(String firstName)
{
    this.firstName = firstName;
}
public String getFirstName()
{
    return firstName;
}

public void getLastName(String lastName)
{
    this.lastName = lastName;
}
public String getLastName()
{
    return lastName;
}

public void getScore(int score)
{
    this.score = score;
}
public int getScore()
{
    return score;
}

@Override
public int compareTo(Object o)
{
   //Compares Student objects by last name. If the last names are the same 
   //it compares by first name.
    Student s = (Student) o;

    if (this.getLastName().toUpperCase() < s.getLastName().toUpperCase())
        return -1;
    else if (this.getLastName().toUpperCase() > s.getLastName().toUpperCase())
        return 1;
    else
    {
        if(this.getFirstName().toUpperCase( < s.getFirstName().toUpperCase()
            return -1;
        else if (this.getFirstName().toUpperCase( > s.getFirstName().toUpperCase()
            return 1;
        else
            return 0;
    }
}
}

1 个答案:

答案 0 :(得分:5)

不要让事情变得更复杂:

  • String类已提供compareToIgnoreCase方法
  • String的比较方法返回的值已经很好,可以直接返回

基本上相同的功能可用以下表达:

int compare = getLastName().compareToIgnoreCase(o.getLastName());
return compare == 0 ? getFirstName().compareToIgnoreCase(o.getFirstName()) : compare;

请注意,如果您有o instanceof Student参数,则需要检查Object

我不知道您使用自定义IComparable界面的原因,这听起来很像C#中提供的界面,因为Java提供的Comparable<T>是通用的,并且没有要求检查参数的运行时类型(因为它不再是Object而是T)。