我确实找到了答案,他们对标准字母表有好处。但我的情况与此不同。
所以,我用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”这个虚构的例子中看到的那样,这个国家真的搞砸了字母表。 在介绍了两个虚构国家的这两个字母的这两个例子后,你就明白了为什么我不能用标准方法来排序字符串。
所以,请你帮我解决这个问题。我不知道如何根据这个搞砸的字母表进行排序。
post scriptum: 下面的这一行对于这个问题并不重要,但如果有人想知道我在哪里找到这样搞乱的字母,那么它们只是更多的信息
好吧,我给出了这些由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 + default = 32例,其中每个都有自己的开关32个案例。总共1024个案例,如果我的普通案例有4行代码,我最终会说如果我想用非英文字母对字符串进行排序,那我的排序方法至少会有4096行。 这是一个很大的方法。 这是最愚蠢的排序方式,但目前我只能弄明白。 所以我在这里问,因为我希望有人知道任何更简单的方法来做到这一点。这个方法不像4k行代码那么大,只是为了排序愚蠢的字符串。 我有一个排序英文字符串的方法,它只需要超过10行代码。 我希望有人可以建议我少于4k行的代码。
所以,如果有人知道更简单的解决方案,我将不胜感激。
感谢名单。
答案 0 :(得分:4)
你使用Collator
。 Collators是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);
本地不仅仅是&#34;语言&#34;还有许多其他公约。根据国家/地区或国家/地区的惯例,可以对同一种语言进行不同的排序 - 这就是为什么最多可以通过3个部分识别区域设置的原因:&#34; country&#34;,&# 34;区域&#34;和&#34;变种&#34;。
答案 1 :(得分:3)
这个概念叫做整理。您可以查看概念以了解更多信息。例如,Oracle / Sun有一个关于这个概念的教程: