繁体   English   中英

如何排序非英语字符串?

[英]how to sort non-english strings?

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

所以,我用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行代码。

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

感谢名单。

你使用Collator 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”。

这个概念叫做整理。 您可以查看概念以了解更多信息。 例如,Oracle / Sun有一个关于这个概念的教程:

https://docs.oracle.com/javase/tutorial/i18n/text/rule.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM