上一篇:使用案例回顾类库相关知识(中) | 带你学《Java语言高级特性》之四十四
回顾之前学习的类库相关知识,我们已经对其基本概念与简单使用有了一个较为全面的了解,现在让我们一起来结合具体的一些案例巩固一下程序国际化和比较器的相关内容吧。
【本节目标】
通过阅读本节内容,你将结合相关案例场景进行功能实现,复习程序国际化和比较器相关内容,进一步熟悉Locale类和ResourceBundle类,实现动态加载文件资源类,掌握Comparable接口的实现方法,实现学生信息的排序。
国家代码
类库案例分析七
编写程序,实现国际化应用,从命令行输入国家的代号,例如1表示中国,2表示美国,然后根据输入代号的不同调用不同的资源文件显示信息。
本程序的实现肯定要通过Locale类的对象来指定区域,随后利用ResourceBundle类加载资源文件,而对于数据的输入可以继续使用初始化参数形式来完成。
- 定义中文的资源文件:cn.mldn.message.Messages_zh_CN.properties
文件内容如下:
info=感谢小强同学请客吃冰激凌!
- 定义英文的资源文件:cn.mldn.message.Messages_en_US.properties
info=Thanks Qiang , your ice very nice !
- 定义程序类进行加载控制
import java.util.Locale;
import java.util.ResourceBundle;
class MessageUtil {
public static final int CHINA = 1 ;
public static final int USA = 2 ;
private static final String KEY = "info";
private static final String BASENAME = "cn.mldn.message.Messages";
public String getMessage(int num) {
Locale loc = this.getLocale(num);
if(loc == null) {
return "Nothing" ;
} else {
return ResourceBundle.getBundle(BASENAME, loc).getString(KEY);
}
}
private Locale getLocale(int num) {
switch(num) {
case CHINA:
return new Locale("zh", "CN");
case USA:
return new Locale("en", "US");
default:
return null;
}
}
}
public class JavaAPIDemo {
public static void main(String[] args) {
if (args.length != 1) { // 没有得到输入参数
System.out.println("程序执行错误,没有设置区域编码,正确格式:java JavaAPIDemo 选择项")
System.exit(1);
}
int choose = Integer.parseInt(args[0]);
System.out.println(new MessageUtil().getMessage(choose));
}
}
设置输入为1,运行结果:
感谢小强同学请客吃冰激凌!
这种在程序中不再修改的内容往往会定义成常量,这个情况在开发过程中是很常见的。
学生信息比较
类库案例分析八
按照“姓名:年龄:成绩|姓名:年龄:成绩”的格式定义字符串 “张三:21:98|李四:22:89|王五:20:70”, 要求将每组值分别保存在Student对象之中,并对这些对象进行排序,排序的原则为:按照成绩由高到低排序,如果成绩相等,则按照年龄由低到高排序。
本程序最典型的做法是直接利用比较器来完成处理,如果不使用比较器也可以完成,相当于自己采用冒泡的方式进行排列,使用了比较器就可以使用Arrays类做处理。
程序编写如下:
import java.util.Arrays;
public class JavaAPIDemo {
public static void main(String[] args) {
String input = "张三:21:98|李四:22:89|王五:20:70";
String result[] = input.split("\\|");
Student students [] = new Student [result.length];
for (int x = 0; x < result.length; x ++) {
String temp [] = result[x].split(":");
students[x] = new Student(temp[0], Integer.parseInt(temp[1]), Double.parseDouble(temp[2]));
}
Arrays.sort(students);
System.out.println(Arrays.toString(students));
}
}
class Student implements Comparable<Student> {
private String name;
private int age;
private souble score;
public Student(String name, int age, double score) {
super();
this.name = name;
this.age = age;
this.score = score;
}
@Override
public int compareTo(Student stu) {
if (this.score < stu.score) {
return 1;
} else if (this.score > stu.score) {
return -1;
} else {
return this.age - stu.age;
}
}
@Override
public String toString() {
return "【学生信息】姓名:" + this.name + "、年龄:" + this.age + "、成绩:" + this.score + "\n";
}
}
运行结果:
[【学生信息】姓名:张三、年龄:21、成绩:98.0
, 【学生信息】姓名:李四、年龄:22、成绩:89.0
, 【学生信息】姓名:王五、年龄:20、成绩:70.0
]
结构化字符串处理:“内容|内容|”,如果有复杂的情况内容里面可能再有其他标记。这种做法在开发中是广泛使用的。
想学习更多的Java的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学