瀛楃涓叉帓搴?/span>
鏈枃鏄疭un瀹樻柟浠log褰㈠紡鍙戝竷鐨凧ava鏍稿績(jī)鎶鏈獚闂?JavaCoreTechTip)涓殑涓涓傛垜涔嬪墠灝氭湭鍏蟲(chóng)敞榪噅ava.text.Collator綾伙紝鐪嬭繃Sorting Strings榪欎釜tip涔嬪悗瑙夊緱鏈変簺鎰忎箟錛屾晠緲昏瘧鍦ㄤ簡(jiǎn)姝ゅ錛屼篃甯屾湜瀵瑰叾瀹冩湅鍙嬫湁鎵鍔╃泭銆?2008.04.07鏈鍚庢洿鏂?
浣跨敤Java騫沖彴榪涜瀛楃涓叉帓搴忚璁や負(fù)鏄竴浠剁畝鍗曠殑宸ヤ綔錛屼絾涓哄浗闄呭競(jìng)鍦哄紑鍙戠▼搴忔椂錛屽垯闇瑕佹湁鏇村鐨勮冭檻銆傚鏋滀綘闄峰叆鍙叧娉ㄨ嫳璇殑蹇?jī)鎬佷腑錛屽茍璁や負(fù)浣犵殑紼嬪簭浼?xì)宸ヤ綔鐨勫緢濂藉Q屽洜涓哄畠鎵鏄劇ず鐨勫瓧絎︿覆浠庝粖寰鍚庨兘鏄竴鏍風(fēng)殑錛屼綘鍙兘璁や負(fù)涓鍒囬兘寰堟甯搞備絾涓鏃︿綘鏈変竴浣嶈タ鐝墮鐢ㄦ埛錛屼粬甯屾湜鑳藉姝e父鍦板mañana榪涜鎺掑簭錛屼絾濡傛灉浣犻兘鏄嬌鐢⊿tring綾諱腑緙虹渷鐨刢ompare鏂規(guī)硶鍘誨仛鎺掑簭錛屽瓧絎?#241;灝嗕細(xì)璺熷湪瀛楃z涔嬪悗錛岃屽湪姝e父鐨勮タ鐝墮璇帓搴忎腑錛?#241;搴旇鍦ㄥ瓧絎鍜宱涔嬮棿銆傝繖灝辨槸java.text鍖呯殑綾籆ollator鍙戞尌浣滅敤鐨勫湴鏂逛簡(jiǎn)銆?
鎯沖儚榪欐牱鐨勪竴緇勮瘝
- first
- mañana
- man
- many
- maxi
- next
浣跨敤String綾葷殑榛樿鎺掑簭鏈哄埗錛屽嵆瀹冪殑compare()鏂規(guī)硶錛屾帓搴忕殑緇撴灉灝嗕細(xì)鏄細(xì)
- first
- man
- many
- maxi
- mañana
- next
姝ゅ錛宮añana鍑虹幇鍦╩axi涓巒ext涔嬮棿銆傝屽湪瑗跨彮鐗欒涓栫晫涓紝mañana搴旇鍑虹幇鍦╩any鍜宮axi涔嬮棿錛?
鍥犱負(fù)鍦ㄥ瓧姣嶈〃涓紝瀛楃ñ(璇諱綔eñe)璺熷湪n涔嬪悗銆傚綋鏉ヤ簡(jiǎn)涓涓痙璇敤鎴鳳紝鎯崇敤浠栦滑鑷繁鐨勫彉闊崇鏃訛紝浣犲氨鍙互鍐欎竴涓嚜宸辯殑瀹氬埗鎺掑簭瑙勫垯鏉ュ鐞?#241;錛?
鍚﹀垯涓緇勪嬌鐢╢açade鐨勮璁℃ā寮忓皢浼?xì)鎬庢牱鍛紵浣犳槸鍚︽兂璁ゝaçade鍑虹幇鍦╢actory涔嬪墠鎴栦箣鍚庡憿錛?鍏抽敭鏄鍚屽c鎴栧叾瀹冨瓧絎﹂偅鏍峰幓澶勭悊ç鐨勫皬鍐欏彉闊崇銆?
榪欏氨鏄被Collator鑳芥淳涓婄敤鍦虹殑鍦版柟浜?jiǎn)銆傜被Collator鐢ㄤ簬瀵硅璦鏁忔劅鐨勬帓搴忛棶棰橈紝騫朵笉浼?xì)鍙熮Z簬瀹冧滑鐨凙SCII/Unicode瀛楃鍘誨皾璇曟帓搴忋?
浣跨敤Collator瑕佹眰浣犲湪瀹屽叏搴旂敤瀹冪殑鐗規(guī)т箣鍓嶈鐞嗚В涓涓澶栫殑灞炴э紝鍗崇О涔嬩負(fù)寮哄害(Strength)鐨勫睘鎬с侰ollator鐨勫己搴﹁緗喅瀹氫簡(jiǎn)鍦ㄦ帓搴忔椂濡備綍浣跨敤寮?鎴栧急)鍖歸厤銆?
璇ュ睘鎬ф湁4涓彲鑳界殑鍊鹼細(xì)PRIMARY錛孲ECONDARY錛孴ERTIARY鍜孖DENTICAL銆傚叿浣撴槸鍝釜寮哄害鍦ㄤ駭鐢熶綔鐢ㄥ彇鍐充簬璇█鐜銆?
鍏稿瀷鍦幫紝浼?xì)鏈夊涓嬬殑鎯呭嘃c(diǎn)傛寜浠庡悗寰鍓嶇殑欏哄簭錛孖DENTICAL寮哄害琛ㄧず鑳藉琚繘琛岀浉鍚岀殑澶勭悊鐨勫瓧絎﹀繀欏繪槸涓鑷寸殑銆俆ERTIARY閫氬父鐢ㄤ簬蹇界暐澶у皬鍐欏樊寮傘係ECONDARY鐢ㄤ簬蹇界暐鍙橀煶絎︼紝濡俷鍜?#241;銆?
PRIMARY涓嶪DENTICAL鐩鎬技涔熸槸鍩轟簬瀛楁瘝涔嬮棿宸紓錛屼絾鏄綋澶勭悊鎺у埗瀛楃鍜屽彂闊蟲(chóng)椂榪樻槸鏈夋墍涓嶅悓銆傛煡鐪?code>Collator鐨刯avadoc錛?
浠ヨ幏鍙栨洿澶氬叧浜庤繖浜涘己搴︿箣闂寸殑宸紓鍙?qiáng)鍒嗚?Decomposition)妯″紡瑙勫垯鐨勪俊鎭?
涓轟簡(jiǎn)浣跨敤Collator錛屼綘闇瑕佸厛寰楀埌瀹冪殑涓涓疄渚嬨備綘鏃㈠彲浠ヨ皟鐢╣etInstance鏂規(guī)硶浠ュ緱鍒頒竴涓拡瀵歸粯璁よ璦鐜鐨凜ollator瀵硅薄錛?
涔熷彲浠ヤ紶閫掍竴涓寚瀹氱殑Locale瀵硅薄緇檊etInstance鏂規(guī)硶浠ュ緱鍒頒竴涓拡瀵圭壒瀹氳璦鐜鐨凜ollator瀵硅薄銆備緥濡傦紝涓轟簡(jiǎn)鑾峰緱閽堝涓涓タ鐝墮璇殑
Collator瀵硅薄錛屼綘搴斾嬌鐢╪ew Locale("es")鍘誨垱寤轟竴涓タ鐝墮璇殑Locale瀵硅薄錛岀劧鍚庡皢瀹冧紶鍏etInstance鏂規(guī)硶涓細(xì)
Collator esCollator =
Collator.getInstance(new Locale("es"));
鍋囪閽堝璇ヨ璦鐜鐨勯粯璁ollator寮哄害錛岄拡瀵硅タ鐝墮璇殑榛樿寮哄害鏄疭ECONDARY宸茬粡瓚沖浜?jiǎn)銆傜劧鍚庝綘灝嗚繖涓狢ollator瀵硅薄濡備換涓Comparator瀵硅薄
閭f牱浼犲叆Collections綾葷殑sort鏂規(guī)硶鐨勬瘮杈冭鍒欏弬鏁頒腑錛屼互寰楀埌鎺掑簭鍚庣殑List瀵硅薄銆?br />
Collections.sort(list, esCollator);
鎿嶄綔涔嬪墠鐨勫崟璇嶅垪琛紝浣犵幇鍦ㄥ氨浼?xì)寰楀堫C竴涓熀浜庤タ鐝墮璇瓧姣嶈〃鐨勬伆褰撴帓搴忕粨鏋滐細(xì)
- first
- man
- many
- mañana
- maxi
- next
濡傛灉浣犲湪涓婅堪Collator涓崲鐢║S鐨凩ocale瀵硅薄錛岀敱浜?#241;騫朵笉鏄疷S涓湰鏈夌殑瀛楁瘝錛屾墍浠añana灝嗕細(xì)鍑虹幇鍦╩an鍜宮any涔嬮棿銆?
榪欏効鏈変竴涓畝媧佺殑渚嬪瓙浠ユ樉紺鴻繖浜涘樊寮傘?
import java.awt.*;
import java.text.*;
import java.util.*;
import java.util.List; // Explicit import required
import javax.swing.*;
public class Sort {
public static void main(String args[]) {
Runnable runner = new Runnable() {
public void run() {
String words[] = {"first", "mañana", "man",
"many", "maxi", "next"};
List list = Arrays.asList(words);
JFrame frame = new JFrame("Sorting");
frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
Box box = Box.createVerticalBox();
frame.setContentPane(box);
JLabel label = new JLabel("Word List:");
box.add(label);
JTextArea textArea = new JTextArea( list.toString());
box.add(textArea);
Collections.sort(list);
label = new JLabel("Sorted Word List:");
box.add(label);
textArea = new JTextArea(list.toString ());
box.add(textArea);
Collator esCollator = Collator.getInstance(new Locale("es"));
Collections.sort(list, esCollator);
label = new JLabel("Collated Word List:");
box.add(label);
textArea = new JTextArea(list.toString());
box.add(textArea);
frame.setSize(400, 200);
frame.setVisible(true);
}
};
EventQueue.invokeLater (runner);
}
}
鏈鍚庤繕鏈変竴鐐瑰効鍏充簬璇█鎺掑簭瑙勫垯鐨勪俊鎭傞氳繃璋冪敤getInstance鏂規(guī)硶鑰屽緱鍒扮殑Collator瀵硅薄閫氬父鏄敮鎸佺壒瀹氳璦鐨凴uleBasedCollator瀹炰緥銆?
浣犲彲浣跨敤RuleBasedCollator鍘誨畾涔変綘鑷繁鐨勬帓搴忛『搴忋傝綾葷殑Javadoc鏇村畬鏁村湴鎻忚堪浜?jiǎn)杩櫩U嶈鍒欑殑璇硶錛屼絾榪樻槸璁╂垜浠厛鍋囪浣犳湁涓涓?瀛楃瀛楁瘝琛紝
騫跺笇鏈涘瓧姣嶇殑欏哄簭鏄疌AFE錛岃屼笉鏄疉CEF錛屼綘鐨勮鍒欑湅璧鋒潵灝卞儚榪欐牱錛?/span>
String rule =
"< c, C < a, A < f, F < e, E";
RuleBasedCollator collator = new RuleBasedCollator(rule);
涓婅堪瑙勫垯閫氳繃灞曠ず涓嶅悓瀛楁瘝鐨勫ぇ灝忓啓瀹氫箟浜?jiǎn)鐗瑰畾鐨勫瓧姣崣搴搴忎负cafe銆傜幇鍦ㄥ鍗曡瘝鍒楄〃ace錛宑afe錛宔f鍜宖ace浣跨敤鏂扮殑瑙勫垯榪涜鎺掑簭錛?
鎺掑簭緇撴灉鐨勯『搴忎負(fù)cafe錛宎ce錛宖ace鍜宔f錛?string>
import java.text.*;
import java.util.*;
public class Rule {
public static void main(String args[]) throws ParseException {
String words[] = {"ace", "cafe", "ef", "face"};
String rule ="< c, C < a, A < f, F < e, E";
RuleBasedCollator collator = new RuleBasedCollator(rule);
List list = Arrays.asList(words);
Collections.sort(list, collator);
System.out.println(list);
}
}
鍦ㄥ涓婅堪浠g爜緙栬瘧騫惰繍琛屼箣鍚庯紝浣犲皢鐪嬪埌浣跨敤鏂拌鍒欐帓搴忓悗鐨勫崟璇嶏細(xì)
> javac Rule.java
> java Rule
[cafe, ace, face, ef]
璇蜂互鍚庨槄璇籎avadoc涓洿澶氱殑鍏充簬
瑙勫垯璇硶鐨勪俊鎭紝鍐嶅皾璇曟墿灞曞瓧姣嶈〃騫跺鐞嗕笉鍚岀殑鍙橀煶絎︺?br />
鐜板湪錛屽綋浣犱負(fù)鍏ㄤ笘鐣屽紑鍙?
紼嬪簭鏃訛紝浣犵殑紼嬪簭灝辮兘鍋氬嚭鏇村ソ鐨勫噯澶囦互鍘婚傚簲鏈湴鐢ㄦ埛浜?jiǎn)銆備篃瑕佺‘淇濆瓧絎︿覆鍦ㄨ祫婧愬寘涓紝濡備箣鍓嶇殑涓涓獚闂ㄦ墍灞曠ず鐨勯偅鏍鳳細(xì)Earlier tip銆?璇戞敞錛氬師鏂囧茍娌℃湁鎻愪緵榪欎釜Earlier tip鐨勬紜摼鎺ュ湴鍧銆?

]]>