使用案例回顾类库相关知识(下) | 带你学《Java语言高级特性》之四十五

简介: 回顾之前学习的类库相关知识,我们已经对其基本概念与简单使用有了一个较为全面的了解,现在让我们一起来结合具体的一些案例巩固一下程序国际化和比较器的相关内容吧。

上一篇:使用案例回顾类库相关知识(中) | 带你学《Java语言高级特性》之四十四
回顾之前学习的类库相关知识,我们已经对其基本概念与简单使用有了一个较为全面的了解,现在让我们一起来结合具体的一些案例巩固一下程序国际化和比较器的相关内容吧。

【本节目标】
通过阅读本节内容,你将结合相关案例场景进行功能实现,复习程序国际化和比较器相关内容,进一步熟悉Locale类和ResourceBundle类,实现动态加载文件资源类,掌握Comparable接口的实现方法,实现学生信息的排序。

国家代码

类库案例分析七

编写程序,实现国际化应用,从命令行输入国家的代号,例如1表示中国,2表示美国,然后根据输入代号的不同调用不同的资源文件显示信息。
本程序的实现肯定要通过Locale类的对象来指定区域,随后利用ResourceBundle类加载资源文件,而对于数据的输入可以继续使用初始化参数形式来完成。

  1. 定义中文的资源文件:cn.mldn.message.Messages_zh_CN.properties
    文件内容如下:

info=感谢小强同学请客吃冰激凌!

  1. 定义英文的资源文件:cn.mldn.message.Messages_en_US.properties

info=Thanks Qiang , your ice very nice !

  1. 定义程序类进行加载控制
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的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学

下一篇:Flie类-踏入文件的领域 | 带你学《Java语言高级特性》之四十六
更多Java面向对象编程文章查看此处

相关文章
|
23天前
|
SQL 设计模式 安全
Java单例模式几种写法以及代码案例拿来直接使用
Java单例模式几种写法以及代码案例拿来直接使用
31 0
|
30天前
|
数据采集 分布式计算 大数据
Java语言在大数据处理中的应用
传统的大数据处理往往依赖于庞大的数据中心和高性能的服务器,然而随着大数据时代的到来,Java作为一种强大的编程语言正在被广泛应用于大数据处理领域。本文将探讨Java语言在大数据处理中的优势和应用,以及其在分布式计算、数据处理和系统集成等方面的重要作用。
|
1天前
|
SQL Java 数据库连接
Java从入门到精通:2.3.2数据库编程——了解SQL语言,编写基本查询语句
Java从入门到精通:2.3.2数据库编程——了解SQL语言,编写基本查询语句
|
6天前
|
前端开发 Java Go
开发语言详解(python、java、Go(Golong)。。。。)
开发语言详解(python、java、Go(Golong)。。。。)
|
7天前
|
人工智能 前端开发 Java
Java语言开发的AI智慧导诊系统源码springboot+redis 3D互联网智导诊系统源码
智慧导诊解决盲目就诊问题,减轻分诊工作压力。降低挂错号比例,优化就诊流程,有效提高线上线下医疗机构接诊效率。可通过人体画像选择症状部位,了解对应病症信息和推荐就医科室。
145 10
|
7天前
|
Java 关系型数据库 MySQL
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
UWB (ULTRA WIDE BAND, UWB) 技术是一种无线载波通讯技术,它不采用正弦载波,而是利用纳秒级的非正弦波窄脉冲传输数据,因此其所占的频谱范围很宽。一套UWB精确定位系统,最高定位精度可达10cm,具有高精度,高动态,高容量,低功耗的应用。
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
|
11天前
|
Java Android开发 C++
Kotlin vs Java:选择最佳语言进行安卓开发
【4月更文挑战第13天】Java曾是安卓开发的主流语言,但Kotlin的崛起改变了这一局面。Google在2017年支持Kotlin,引发两者优劣讨论。Java以其成熟稳定、强大生态和跨平台能力占优,但代码冗长、开发效率低和语言特性过时是短板。Kotlin则以简洁语法、空安全设计和高度兼容Java脱颖而出,但社区和生态系统仍在发展中,可能存在学习曲线和性能问题。选择语言应考虑项目需求、团队熟悉度、维护性、性能和生态系统。无论选择哪种,理解其差异并适应新技术至关重要。
|
23天前
|
Java
Java语言打印九九乘法表(详解)
Java语言打印九九乘法表(详解)
15 1
Java语言打印九九乘法表(详解)
|
30天前
|
Java API 开发工具
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用(三)
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用
30 0
|
30天前
|
Java 数据处理 数据库
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用(二)
【软件设计师备考 专题 】C、C++、Java、Visual Basic、Visual C++等语言的基础知识和应用
34 0