在我的程序中,我试图按姓氏比较名称,如果它们相同,则使用名字进行比较。但是,我无法弄清楚如何比较字符串。
有人可以帮我解决这个问题吗?
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;
}
}
}
答案 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
)。