我们经常需要用一些数字来代表一些字符串。这里有一些简单的例子:
0 =〉 no apples
1 =〉 an apple
2 =〉 apples
下面这个例子更复杂一些:
less than 0 =〉 freezing
less than 10 =〉 chilly
less than 30 =〉 nice
greater than 30 =〉 too hot
greater than 100 =〉 boiling
写代码时一种解决方案是使用“if…else”语句,还有一种解决方案是使用“switch-case”语句。但事实上还有一种最简单的方法,尽管很少有人去用它,那就是使用Java.text.ChoiceFormat类。
ChoiceFormat可以将数字与字符串联系起来。和其他java.text Format类不同,ChoiceFormats是由一个构造器产生的,而不是由一个构造方法产生的。
下面的代码是用来处理我们第一个简单的例子的:
double[] values = {0,1,2};
String[] output = { "no apples", "an apple", "apples" };
ChoiceFormat cf = new ChoiceFormat(values, output);
String one = cf.format(1);
字符串“one”的值是“an apple”。
在较复杂的那个例子中我们要用到一个ChoiceFormat模板,这样我们就可以具体的列出一个范围的清单和一个相应的字符串的清单。
我们可以这样做:
String pattern = " -1#frozen "+
" 0#freezing "+
" 0.0〈chilly "+
" 10.0〈nice "+
" 30.0〈too hot "+
" 100#boiling ";
ChoiceFormat cf = new ChoiceFormat(pattern);
String temp = cf.format(18.5);
在这个例子中,String类对象temp就是“nice”。
注释:当使用‘equals’符号“#”时,将会用到一个整数。但是当使用‘above’符号“〈”时,是用一个小数。因此,0#freezing表示0归为freezing这一类,0.0〈chilly表示任何大于0的数都归为chilly这一类。那么在两个“#”之间的值就显得有趣了。当这个值是-0.5时,输出的就是“frozen”。-0.5不等于-1,而且比-1大,因此它就被传递到下一个临界值。因为-0.5不等于-1,而且小于0,所以就选择了前一个临界值。
由于上面例子中的间距,输出的值是“frozen ”,而不是“frozen”。解决办法有两个:要么在模板中去掉多余的空格,要么在这段程序完成后去掉它。具体用那种方法取决于可读性的重要程度。