簡體   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