我有一个带有两个字段的学生列表(名称和数字),我想按名称(波斯名称)对列表进行排序,但是当我使用Collections.sort对列表进行排序时,某些波斯字母(例如“ک”和; “گ”和“ژ”& …
结果是:“ی”,“ک”,“م”
但必须为:“ی”,“م”,“ک”
这是我的代码:
public class Student {
private String name;
private int number;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", number=" + number +
'}';
}
}
公共班级主要{
public static void main(String[] args) {
List<Student> studentList = new ArrayList<Student>();
Student temp1 = new Student();
temp1.setName("ی");
temp1.setNumber(5);
Student temp2 = new Student();
temp2.setName("م");
temp2.setNumber(4);
Student temp3 = new Student();
temp3.setName("ک");
temp3.setNumber(3);
studentList.add(temp1);
studentList.add(temp2);
studentList.add(temp3);
// before sort
System.out.println("before sort");
for(Student student : studentList){
System.out.println("Student name: " + student.getName());
}
Locale locale = new Locale("fa");
System.out.println("--------------------");
System.out.println("Language: " + locale.getdisplayLanguage());
System.out.println("--------------------");
if (studentList.size() > 0) {
Collections.sort(studentList, new Comparator<Student>() {
@Override
public int compare(final Student object1, final Student object2) {
return Collator.getInstance(locale).compare(object1.getName(), object2.getName());
}
} );
}
// after sort
System.out.println("after sort");
for(Student student : studentList){
System.out.println("Student name: " + student.getName());
}
}
}
解决方法:
您可以使用整理器,看一下:
Performing Locale-Independent Comparisons
或创建自己的比较器.这里的文档.
之所以要对这些字符串进行排序,是因为使用UTF-16 char表对字符串进行了排序.因此,在UTF-16中,这些字符是:
>م阿拉伯文字母(U 0645)
>阿拉伯字母KEHEH(U 06A9)
>照片阿拉伯字母FARSI YEH(U 06CC)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。