编程语言
首页 > 编程语言> > java – 如何排序非英语字符串?

java – 如何排序非英语字符串?

作者:互联网

我确实查找了答案,它们对标准字母表有好处.但我有不同的情况.

所以,我用Java编程.我正在写一个特定的程序.这个程序在某些地方有一些字符串项列表.
我想根据字母表对这些字符串项进行排序.

如果我按英文字母对其进行排序,那将很容易,因为通常所有代码页都与美国标准的信息交换代码(ASCII)兼容,并且它们已经排序了所有英文字母,所以,如果我想排序的话我的清单,我只需要比较字符的值来确定哪个字母在哪里.

但我的问题是,我不想使用英文字母对列表进行排序.
我的程序可以选择以英语或其他语言显示.
问题在于这些语言中的一些语言与英语字母表中的字母表不同,因此字母与英语字母表中的字母不同,因此简单<,> char值的验证不起作用,因为字母在代码页中没有正确排序.

为了这个问题的目的,我们可以说英文字母表如下:

a,
b,
c,
d,
e,
f,
g.

让我们说有一个名为“ABC”的国家,其字母表如下:

d,
b,
g,
e,
a,
c,
f.

首先,如果a在代码页上等于97,b 98,c 99等,在本例中如何使用第二个字母对我的列表进行排序,因为第二个字母的第一个字母等于100,第二个字母等于到98,第三到103等等?

我的第二个问题:
不幸的是,我翻译我的程序的一些国家也有字母表,其中一些字母组​​合被视为一个字母.
对于我的第二个例子,让我们说国家“def”有以下字母:

d,
g,
be,
e,
fe,
c,
f.

这里:
d – 字母表中的第一个字母,
g – 字母表中的第二个字母,
是 – 字母表中的第三个字母(一个字母,虽然它写成两个字母,但它被认为只是一个字母,并且在字母表中有其位置),
e – 字母表中的第四个字母,
– 字母表中的第五个字母(也写成两个字母,但被视为一个字母),
c – 字母表中的第六个字母,
f – 字母表中的第七个字母.

正如你可以在虚构的国家“def”这个想象中的例子中看到的那样,这个国家真的搞砸了字母表.
在介绍了两个虚构国家的这两个字母的这两个例子后,您就明白了为什么我不能使用标准方法对字符串进行排序.

所以,请你帮我解决这个问题.我不知道我能做些什么来根据这个搞砸的字母表排序.

后脚本:
对于这个问题,这下面的行并不重要,但如果有人想知道我在哪里找到这样的搞砸字母,那么它们只是更多的信息

好吧,我给出了这些由7个随机排列的字母组成的例子,仅仅是为了这个问题的目的 – 使它更简单.如果你想知道,我真正的问题是什么 – 我正在尝试将我的程序翻译成克罗地亚语.克罗地亚字母真的搞砸了,因为它如下:

1 |a
2 |b
3 |c
4 |č
5 |ć
6 |d
7 |đ
8 |đž
9 |e
10|f
11|g
12|h
13|i
14|j
15|k
16|l
17|lj
18|m
19|n
20|nj
21|o
22|p
23|r
24|s
25|š
26|t
27|u
28|v
29|z
30|ž

正如你所看到的,克罗地亚字母表有点类似于英文字母,但大多数字母与英文字母不在同一个位置,而且其中几个字母根本不存在英文字母,而且几个字母是一个字母,写成两个字母.所以很难排序.所以我希望有人知道这样做的一些方法.
当然,有最糟糕的排序方法,它总是有效,可以对任何东西进行排序,这就是使用switch语句的方法,我比较两个字符串项,对于每个字母,我使用switch语句,其中switch语句有31个默认值= 32在这种情况下,每个案例都有自己的32个案例.总共1024个案例,如果我的普通案例有4行代码,我最终会说如果我想用非英文字母对字符串进行排序,那我的排序方法至少会有4096行.
这是一个很大的方法.
这是最愚蠢的排序方式,但目前我只能弄明白.
所以我在这里问,因为我希望有人知道任何更简单的方法来做到这一点.这个方法不像4k行代码那么大,只是为了排序愚蠢的字符串.
我有一个排序英文字符串的方法,它只需要超过10行代码.
我希望有人可以建议我不到4k行代码.

所以,如果有人知道更简单的解决方案,我将不胜感激.

感谢名单.

解决方法:

你使用Collat​​or. Collat​​ors是Java处理国际化比较的方式.

List<String> mylist = ...;
Locale croatian = new Locale("hr", "HR");
// Put whatever Locale you need as the argument to the getInstance method.
Collator collator = Collator.getInstance(croatian);
Collections.sort(mylist, collator);

本地不仅仅是“语言”,还有许多其他惯例.根据国家或地区或国家/地区的惯例,可以对同一种语言进行不同的排序 – 这就是为什么区域设置最多由3个部分标识:“country”,“region”和“variant”.

标签:java,sorting,non-english,alphabet
来源: https://codeday.me/bug/20190611/1218345.html