Step By Step(Java 国际化篇)(五)

2014-11-24 02:47:47 · 作者: · 浏览: 8
8 Date today = new Date();
49 int[] styles = { DateFormat.DEFAULT, DateFormat.SHORT,
50 DateFormat.MEDIUM, DateFormat.LONG, DateFormat.FULL };
51 System.out.println("Locale: " + currentLocale.toString());
52 for (int k = 0; k < styles.length; k++) {
53 DateFormat formatter = DateFormat.getDateInstance(styles[k], currentLocale);
54 String result = formatter.format(today);
55 System.out.println(result);
56 }
57 }
58
59 static public void showTimeStyles(Locale currentLocale) {
60 Date today = new Date();
61 int[] styles = { DateFormat.DEFAULT, DateFormat.SHORT,
62 DateFormat.MEDIUM, DateFormat.LONG, DateFormat.FULL };
63 System.out.println("Locale: " + currentLocale.toString());
64 for (int k = 0; k < styles.length; k++) {
65 DateFormat formatter = DateFormat.getTimeInstance(styles[k], currentLocale);
66 String result = formatter.format(today);
67 System.out.println(result);
68 }
69 }
70
71 static public void main(String[] args) {
72 Locale[] locales = { Locale.CHINA,new Locale("en", "US") };
73 for (int i = 0; i < locales.length; i++)
74 displayDate(locales[i]);
75 showDateStyles(new Locale("en", "US"));
76 showDateStyles(Locale.CHINA);
77 showTimeStyles(new Locale("en", "US"));
78 showTimeStyles(Locale.CHINA);
79 showBothStyles(new Locale("en", "US"));
80 showBothStyles(Locale.CHINA);
81 }
82 }
5. 字符排序:
大多数程序员都知道如何使用String类中的compareTo方法对字符串进行比较。但是由于大小写字符的ASCII值之间的差异,既小写字符总是大于大写字符,因此很多时候排序的结果并非程序员所真正希望得到的。然而有些时候,排序的问题不仅仅被大小写的问题所困扰,使用不同的本地化(Locale)对象,得到的排序规则往往也是不同的,比如在有些语言中存在重音符,其值更是大于小写字符,基于这样的排序结果也就失去的排序的真正意义。在Java中提供了Collator对象(Comparator的实现类),因此在当需要对字符串进行排序时,可以使用该类的工厂方法针对不同的Locale生成一个Collator的子类,之后在传给如Collections.sort这样的排序方法来完成实际的排序,如下例:
1 static public void main(String[] args) {
2 List fruits = new ArrayList();
3 fruits.add("A");
4 fruits.add("é");
5 fruits.add("C");
6 fruits.add("D");
7 fruits.add("A");
8 Collator collator = Collator.getInstance(Locale.US);
9 Collections.sort(fruits, collator);
10 for (int i = 0; i < fruits.size(); i++) {
11 String fruit = fruits.get(i);
12 System.out.println("Fruit = " + fruit);
13 }
14 }
15 /* 结果如下:
16 Fruit = A
17 Fruit = A
18 Fruit = C
19 Fruit = D
20 Fruit = é
21 */
在Collator中提供了不同的排序强度,字符间的差别主要区分为PRIMARY、SECONDARY和TERTIARY三种,PRIMARY差别将主要关注字符间的主要差异,如A和Z之间就是主要的差异,而é和" "(法语)之间的差别为SECONDARY,最后"A"和"a"之间的差异为TERTIARY。由此看出,排序强度越高,其区分字符间的差异性就越差,见下例:
1 static public void main(String[] args) {
2 String s1 = "é";
3 String s2 = " ";
4
5 Collator frCollator = Collator.getInstance(Locale.FRANCE);
6 System.out.println("The current strength is PRIMARY.");
7 frCollator.setStrength(Collator.PRIMARY);
8 if (frCollator.compare(s1, s2) == 0)
9 System.out.println("s1 = s2");
10 System.out.println("The current strength i