2016-04-29 44 views
0

我正在將.NET應用程序轉換爲Java。該應用程序讀取此格式的文件:傳統西班牙語在Java中對字符串進行排序

es-MX 
jueves 
verde 
amarillo 
blanco 
llave 
llover 
loma 
cinco 
domingo 
rojo 

,但我有麻煩搞清楚如何根據單詞的傳統排序排序西班牙語。在VB.NET中,你會看到:

Dim spainCultureTraditional As CultureInfo = New CultureInfo(&H40A) 

但我無法在Java中找到等效的傳統排序語言環境。兩者之間的唯一區別是在es-MX/es-ESllavellover將與國際分揀交換。

注意:語言環境es-ES在Java中不一定相同,在VB.NET中不一定相同。

+0

我會說,這樣做的正確事情是一個'Collat​​or' - 但我不能讓它像在ideone中描述的那樣工作:http://ideone.com/Kf3ueO –

回答

2

您可能需要自定義整理規則。沒有爲西班牙場景下的傳統這裏演示:

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

摘要代碼:

String smallnTilde = "\u00F1"; 
String capitalNTilde = "\u00D1"; 

String traditionalSpanishRules = (
    "< a,A < b,B < c,C " + 
    "< ch, cH, Ch, CH " + 
    "< d,D < e,E < f,F " + 
    "< g,G < h,H < i,I < j,J < k,K < l,L " + 
    "< ll, lL, Ll, LL " + 
    "< m,M < n,N " + 
    "< " + smallnTilde + "," + capitalNTilde + " " + 
    "< o,O < p,P < q,Q < r,R " + 
    "< s,S < t,T < u,U < v,V < w,W < x,X " + 
    "< y,Y < z,Z"); 

RuleBasedCollator spCollator = new RuleBasedCollator(traditionalSpanishRules); 

Collections.sort(words, spCollator); 
System.out.println(words); 
+1

使用此代碼時,請刪除對「新字符串」的調用。 Java官方文檔暗示了這一點令人遺憾,但沒有理由在你自己的代碼中這樣做。 –

+1

是的,我同意,我編輯了代碼並將其刪除。我認爲這不會讓這些字符串被禁止。 –

+0

非常感謝!它像魅力一樣工作 - 更好的是,它爲什麼會起作用是非常有意義的。 – djthoms