按字母顺序排列arraylist(波斯语)

时间:2017-04-19 13:36:43

标签: java list sorting

我有波斯语中的项目列表,我想按字母顺序对它们进行排序。
据我所知,java不支持正确的波斯语字母排序。

我的代码:

List<String> items = new ArrayList<>();
items.add("آب");
items.add("بابا");
items.add("تار");
items.add("پارک");
items.add("توت");

Collections.sort(items);

当我打印此列表时,结果将是:

آب
بابا
تار
توت
پارک

但它一定是这样的:

آب
بابا
پارک
تار
توت

问题在于这些字母گچپژ
我该如何解决?

6 个答案:

答案 0 :(得分:4)

在你的问题的代码中,Java使用unicode命令对字符串进行排序,并且(我必须猜测)这对波斯语没有帮助。

要正确排序,您可以使用Java提供的Collator功能。

Collator collator = Collator.getInstance(new Locale("fa", "IR"));
collator.setStrength(Collator.PRIMARY);
Collections.sort(items, collator);

我不知道波斯是否得到支持。

答案 1 :(得分:1)

不幸的是,这是一个旧的(自Java 1.4以来),但仍然没有解决增强请求。 请参阅错误报告JDK-6182989 - Collator should support the correct sort order for Persian。 但也许你可以复制那里给出的PersianCollator的建议代码,然后像这样使用它:

Collections.sort(items, PersianCollator.persianCollator());

答案 2 :(得分:1)

此代码将给出预期结果:

@api.multi
def download_doc_one(self):
    return {
        'type': 'ir.actions.act_url',
        'url': 'http://docs.python.org/library/webbrowser.html' #example url
        'target': 'new',
    }

仅按首字母排序。要通过其他字母订购,应相应地改进比较方法。

答案 3 :(得分:1)

不确定您使用的Java版本,但您可以使用简单的RuleBasedCollator来切换需要切换的少数字符的顺序(其余字符应遵循Unicode顺序)。 API文档中的类描述中有一个很好的例子。

还有complete example in the Java Tutorials显示如何使用您创建的RuleBasedCollat​​or。

答案 4 :(得分:1)

万一其他解决方案(例如上述解决方案)在那儿无法使用,您可以使用此技巧,

static private String prepareForArabicSort(String text) {
        return text
                .replaceAll("ی", "ي")
                .replaceAll("ک", "ك")
                .replaceAll("گ", "كی")
                .replaceAll("ژ", "زی")
                .replaceAll("چ", "جی")
                .replaceAll("پ", "بی");
}

Arrays.sort(list, (l, r) -> {
    return prepareForArabicSort(l).compareTo(prepareForArabicSort(r);
});

答案 5 :(得分:0)

如果有对象的arrayList,则可以使用此方法

首先创建一个整理器:

val collator: Collator = Collator.getInstance(Locale("fa", "IR"))
collator.strength = Collator.PRIMARY

然后通过sortedBy这样列出您的列表:

val sortList = items.sortedWith(compareBy (collator){ it.name})

该项目是您的对象的arrayList,它是您的比较器