gpt4 book ai didi

java - 如何对非英语字符串进行排序?

转载 作者:搜寻专家 更新时间:2023-11-01 01:40:53 24 4
gpt4 key购买 nike

我确实查找了答案,它们对于标准字母很有用。但我的情况与此不同。

所以,我正在用Java编程。我正在写某个程序。该程序在某些地方具有一些字符串项目列表。
我想根据字母对那些字符串项目进行排序。

如果我要按英文字母排序,这很容易,因为通常所有代码页都与美国信息交换标准码(ASCII)兼容,并且它们的所有英文字母都已经排序,因此,如果我要排序在我的列表中,我只需要比较chars的值即可确定哪个字母在哪里。

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

为了这个问题的目的,可以说英语字母如下:

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

假设有一个名为“ABC”的国家,其字母如下所示:
d,
b,
g,
e,
a,
c,
f.

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

我的第二个问题:
不幸的是,我正在翻译程序的某些国家/地区也有字母,其中某些字母组合被视为一个字母。
对于我的第二个示例,假设国家“def”具有以下字母:
d,
g,
be,
e,
fe,
c,
f.

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

正如您在虚构国家“def”的虚构示例2中看到的那样,这个国家确实搞砸了字母。
在介绍了两个假想国家的这两个字母的这两个示例之后,您了解了为什么我不能使用标准方法对字符串进行排序。

因此,能否请您帮助我进行此类排序。我不确定该如何根据这个混乱的字母进行排序。

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

好吧,为了这个问题,我给出了由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个部分标识的原因:“国家”,“区域”和“变体”。

关于java - 如何对非英语字符串进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41215852/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com