微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐