java-如何按字符串值(波斯字母)对列表排序?

我有一个带有两个字段的学生列表(名称和数字),我想按名称(波斯名称)对列表进行排序,但是当我使用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

Sorting arabic words in java

或创建自己的比较器.这里的文档.

Object Ordering

之所以要对这些字符串进行排序,是因为使用UTF-16 char表对字符串进行了排序.因此,在UTF-16中,这些字符是:

>م阿拉伯文字母(U 0645)
>阿拉伯字母KEHEH(U 06A9)
>照片阿拉伯字母FARSI YEH(U 06CC)

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...