[Java] 类库例题
例1 字符串操作
定义一个StringBuffer类对象,然后通过append()方法向对象中添加26个小写字母,每次只添加一次,共添加26次,然后按逆序方式输出,并且可以删除前5个字符
- 面向过程实现
1 public class TestDemo {
2 public static void main(String[] args) throws Exception{
3 StringBuffer buffer = new StringBuffer();
4 for(int x = 'a' ; x <= 'z' ; x++) {
5 buffer.append((char)x);
6 }
7 System.out.println("[初始化数据]" + buffer);
8 System.out.println("[逆序输出]" + buffer.reverse());
9 System.out.println("[删除前五个字符]" + buffer.delete(0, 5));
10 }
11 }
- 面向对象实现(接口先行--子类实现--工厂解耦)
1 interface IContent{
2 public String content();
3 public String reverse();
4 public String delete(int index);
5 }
6 class StringContent implements IContent{
7 private StringBuffer buffer = new StringBuffer();
8 public StringContent() {
9 for(int x = 'a' ; x <= 'z' ; x++) {
10 buffer.append((char)x);
11 }
12 }
13 @Override
14 public String content() {
15 return this.buffer.toString();
16 }
17 @Override
18 public String reverse() {
19 return this.buffer.reverse().toString();
20 }
21 @Override
22 public String delete(int index) {
23 return this.buffer.delete(0, index).toString();
24 }
25 }
26 class Factory{
27 private Factory() {}
28 public static IContent getInstance() {
29 return new StringContent();
30 }
31 }
32 public class TestDemo {
33 public static void main(String[] args) throws Exception{
34 IContent content = Factory.getInstance();
35 System.out.println("[初始化数据]" + content.content());
36 System.out.println("[逆序输出]" + content.reverse());
37 System.out.println("[删除前五个字符]" + content.delete(5));
38 }
39 }
- 先定义出公共处理标准,随后依据此标准进行项目的具体实现
- 对于接口子类的获取采用工厂模式
例2 生成随机数
利用Random类产生5个1~30之间(包括1和30)的随机整数
- 接口:描述最终目的
- 异常类:继承RuntimeException,业务异常,不希望此异常直接出现在方法的定义声明处(如果继承Exception会强制处理)
1 package javaSE;
2
3 import java.util.Arrays;
4 import java.util.Random;
5
6 interface INumber{
7 public int[] getData();
8 }
9 class InvalidArrayLengthException extends RuntimeException{
10 public InvalidArrayLengthException() {}
11 public InvalidArrayLengthException(String str) {
12 super(str);
13 }
14 }
15 class RandomNumber implements INumber{
16 private int data[];
17 public RandomNumber() {
18 this(3);
19 }
20 public RandomNumber(int len) {
21 if(len <= 0) {
22 throw new InvalidArrayLengthException("数组长度不正确!");
23 }
24 this.data = new int[len];
25 this.createRandom();
26 }
27 public void createRandom() {
28 Random random = new Random();
29 for(int x = 0 ; x < this.data.length; x++) {
30 this.data[x] = random.nextInt(30) + 1;
31 }
32 }
33 @Override
34 public int[] getData() {
35 return this.data;
36 }
37 }
38 class Factory{
39 private Factory() {}
40 public static INumber getInstance(int ...args) {
41 if(args.length == 0) {
42 return new RandomNumber();
43 }else {
44 return new RandomNumber(args[0]);
45 }
46 }
47 }
48 public class TestDemo {
49 public static void main(String[] args) throws Exception{
50 INumber content = Factory.getInstance(5);
51 System.out.println(Arrays.toString(content.getData()));
52 }
53 }
例3 Email验证
输入一个Email地址,用正则表达式验证该Email是否正确
1 import java.util.Arrays;
2 import java.util.Random;
3
4 interface IValidator{
5 public boolean test() ;
6 }
7 class EmailValidator implements IValidator{
8 public static final String DEFAULT_EMAIL_REGEX = "\\w+@\\w+\\.\\w+";
9 private String regex;
10 private String content;
11 public EmailValidator(String content) {
12 this(content,DEFAULT_EMAIL_REGEX);
13 this.content = content;
14 this.regex = DEFAULT_EMAIL_REGEX;
15 }
16 public EmailValidator(String content,String regex) {
17 this.content = content;
18 this.regex = regex;
19 }
20 @Override
21 public boolean test() {
22 if(this.content == null || "".equals(this.content)) {
23 return false;
24 }
25 return this.content.matches(this.regex);
26 }
27 }
28 class Factory{
29 private Factory() {}
30 public static IValidator getInstance(String content,String ...regex) {
31 if(regex.length == 0) {
32 return new EmailValidator(content);
33 }else {
34 return new EmailValidator(content,regex[0]);
35 }
36 }
37 }
38 public class TestDemo {
39 public static void main(String[] args) throws Exception{
40 {IValidator validator = Factory.getInstance("muyan@yootk.com");
41 System.out.println(validator.test() ? "验证通过":"Email数据输入错误");}
42 {IValidator validator = Factory.getInstance("muyan@yootk.org",
43 "[a-zA-Z][a-zA-Z0-9_\\-\\.]+@\\w+\\.(com|com\\.cn|net\\.cn|gov|edu|org)");
44 System.out.println(validator.test() ? "验证通过":"Email数据输入错误");}
45 }
46 }
- 即可使用默认的正则表达式,也可根据需要扩充
例4 IP地址验证
编写正则表达式,判断给定的IP地址是否合法
1 interface IValidator{
2 public boolean test() ;
3 }
4 class IPHostValidator implements IValidator{
5 public static final String DEFAULT_EMAIL_REGEX = "\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}";
6 private String regex;
7 private String content;
8 public IPHostValidator(String content) {
9 this(content, DEFAULT_EMAIL_REGEX);
10 }
11 public IPHostValidator(String content,String regex) {
12 this.content = content;
13 this.regex = regex;
14 }
15 @Override
16 public boolean test() {
17 if(this.content == null || "".equals(this.content)) {
18 return false;
19 }
20 if("0.0.0.0".equals(this.content)||"255.255.255.255".equals(this.content)) {
21 return false;
22 }
23 return this.content.matches(this.regex);
24 }
25 }
26 class Factory{
27 private Factory() {}
28 public static IValidator getInstance(String content,String ...regex) {
29 if(regex.length == 0) {
30 return new IPHostValidator(content);
31 }else {
32 return new IPHostValidator(content,regex[0]);
33 }
34 }
35 }
36 public class TestDemo {
37 public static void main(String[] args) throws Exception{
38 IValidator validator = Factory.getInstance("192.168.1.2");
39 System.out.println(validator.test() ? "验证通过":"IP数据输入错误");
40 }
41 }
- 实际开发中除了核心代码,最常见的就是数据验证功能
例5 HTML拆分
给定一段HTML代码:“<font face="Arial,Serif" size="+2" color="red">”,拆分为
face=Arial,Serif
size=+2
color=red
1 import java.util.regex.Matcher;
2 import java.util.regex.Pattern;
3
4 interface IStringHandle{
5 public String[] split();
6 }
7 class HTMLStringHandle implements IStringHandle{
8 private String content;
9 private String regex;
10 public HTMLStringHandle(String content,String regex) {
11 this.content = content;
12 this.regex = regex;
13 }
14 @Override
15 public String[] split() {
16 Matcher matcher = Pattern.compile(this.regex).matcher(this.content);
17 StringBuffer buffer = new StringBuffer(this.content.length());
18 while(matcher.find()) {
19 String value = matcher.group(0);
20 String temp[] = value.split("=");
21 buffer.append(temp[0]).append(":").append(temp[1].replaceAll("\"","")).append("|");
22 }
23 return buffer.toString().split("\\|");
24 }
25 }
26 class Factory{
27 private Factory() {}
28 public static IStringHandle getInstance(String content,String regex) {
29 return new HTMLStringHandle(content,regex);
30 }
31 }
32 public class TestDemo {
33 public static void main(String[] args) throws Exception{
34 String html = "<font face=\"Arial,Serif\" size=\"+2\" color=\"red\">";
35 String regex = "\\w+=\"[a-zA-Z0-9,\\+]+\"";
36 IStringHandle handle = Factory.getInstance(html, regex);
37 String result[] = handle.split();
38 for(String temp:result) {
39 System.out.println(temp);
40 }
41 }
42 }
- 可使用HTMLParser+XPath
例6 国际化应用
从命令行输入国家代号,1代表中国,2代表美国,然后根据不同代号调用不同的资源文件显示信息
- 编写资源文件
- 加载资源文件
- 通过IMessage接口,根据key获取数据
1 import java.util.Locale;
2 import java.util.ResourceBundle;
3
4 interface IMessage{
5 public String get(String key);
6 }
7
8 class ResourceMessage implements IMessage{
9 private static final String BASE_NAME = "Message";
10 private ResourceBundle resourceBundle;
11 public ResourceMessage(Locale locale){
12 this.resourceBundle = ResourceBundle.getBundle(BASE_NAME,locale);
13 }
14
15 @Override
16 public String get(String key){
17 try{
18 return this.resourceBundle.getString(key);
19 }catch (Exception e){
20 return null;
21 }
22 }
23 }
24
25 class ParameterException extends RuntimeException{
26 public ParameterException(){}
27 public ParameterException(String msg){
28 super(msg);
29 }
30 }
31
32 class Factory{
33 private Factory(){}
34 public static IMessage getInstance(String args[]){
35 if(args.length != 1 || !args[0].matches("\\d")){
36 throw new ParameterException("初始参数配置错误,无法执行");
37 }
38 int select = Integer.parseInt(args[0]);
39 switch (select){
40 case 1:
41 return new ResourceMessage(Locale.CHINESE);
42 case 2:
43 return new ResourceMessage(Locale.US);
44 default:
45 return null;
46 }
47 }
48 }
49
50 public class YootkDemo {
51 public static void main(String[] args) throws Exception{
52 IMessage message = Factory.getInstance(args);
53 System.out.println(message.get("welcome.info"));
54 }
55 }
>> Hello
参考
idea:Maven项目,pom.xml中的resources标签
https://blog.csdn.net/qq_36134376/article/details/90762263
[Java] 类库例题的更多相关文章
- Java 类库和常用类库
Java 类库概念: Java 的应用程序接口 (API) 以包的形式来组织,每个包提供了大量的相关类.接口和异常处理类,这些包的集合就是 Java 的类库 包名以 Java 开始的包是 Java 核 ...
- [Liferay6.2]启动Tomcat提示APR不能在java类库路径中被找到的解决办法
问题描述 启动liferay之后,在控制台中打印出会打印出以下信息: 信息: The APR based Apache Tomcat Native library which allows optim ...
- 介绍4款json的java类库 及 其性能测试
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 易于人阅读和编写.同时也易于机器解析和生成. 它基于JavaScript Programming Lan ...
- 关于ECharts Java类库的一个jquery插件
在项目中开发图表功能时用到了Echars和一个关于Echars的java类库(http://git.oschina.net/free/ECharts).这个类库主要目的是方便在Java中构造EChar ...
- java类库
Java的应用程序接口(API)以包的形式来组织,每个包提供大量的相关类.接口和异常处理类,这些包的集合就是Java的类库. Java类库可以分为两种 包名以java开始的包是Java核心包(Java ...
- Effective Java 第三版——59. 熟悉并使用Java类库
Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...
- 词典的实现(3)--使用JAVA类库ArrayList实现Map数据结构
1,在词典的实现(2)-借助顺序表(数组)实现词典文章中使用了自定义的数组代替ArrayList,并实现了Map数据结构的基本功能.而借助JAVA类库ArrayList类的一些方法可以更加容易地实现M ...
- 使用Java类库POI生成简易的Excel报表
使用Java类库POI生成简易的Excel报表 1.需求 1.数据库生成报表需要转义其中字段的信息.比如 1,有效 2.无效等 2.日期格式的自数据需要转义其格式. 3.标题的格式和数据的格式需要分别 ...
- Java类库和常用类库介绍
Java 类库概念: Java 的应用程序接口 (API) 以包的形式来组织,每个包提供了大量的相关类.接口和异常处理类,这些包的集合就是 Java 的类库 包名以 Java 开始的包是 Java 核 ...
随机推荐
- 前端富文本编辑器vue + tinymce
之前有项目需要用到富文本编辑器,在网上找了好几个后,最终选择了这个功能强大,扩展性强的tinymce tinymce中文文档地址(不全):http://tinymce.ax-z.cn/ tinymce ...
- 抗DDOS应急预案实践-生产环境总结-建议必看
一.首先摸清楚环境与资源 为DDoS应急预案提供支撑 所在的网络环境中,有多少条互联网出口?每一条带宽多少? 每一条互联网出口的运营商是否支持DDoS攻击清洗,我们是否购买,或可以紧急试用?当发生DD ...
- 全网最详细的Linux命令系列-Find命令
Find工具实战 Find工具实战,Find工具主要用于操作系统文件.目录的查找,其语法参数格式为: find path -option [ -print ] [ -exec -ok command ...
- 使用Gensim库对文本进行词袋、TF-IDF和n-gram方法向量化处理
Gensim库简介 机器学习算法需要使用向量化后的数据进行预测,对于文本数据来说,因为算法执行的是关于矩形的数学运算,这意味着我们必须将字符串转换为向量.从数学的角度看,向量是具有大小和方向的几何对象 ...
- SQL语句练习(基础版)
最近在学习SQL基本语句的练习,在此分享一下笔者做过的练习以及个人的解决教程: 首先是基本练习表格的搭建,具体内容如下表所示: Snum Sname Ssex Sage Sphone Dname S0 ...
- 6.3string用法
string类型可以大大方便对字符串的处理 1.string的定义 string str; string str="abcd"; 2.string中内容的访问 (1)可以像字符数组 ...
- GO-04-变量
GO变量 Go 语言的变量名由字母.数字.下画线组成,首个字符不能为数字: Go 语法规定,定义的局部变量若没有被调用会发生编译错误. 变量的声明 var 变量名 变量类型 批量声明变量 var ( ...
- Ambassador-05-自动重试
自动重试定义: retry_policy: retry_on: <string> num_retries: <integer> per_try_timeout: <str ...
- 2021S软件工程——案例分析作业
2021S软件工程--案例分析作业 18231169 黄思为 项目 内容 这个作业属于哪个课程 2021春季软件工程(罗杰 任建) 这个作业的要求在哪里 案例分析作业 我在这个课程的目标是 了解并熟悉 ...
- 【C#】一个Loading窗体载入与销毁的方法
写在前面 Minecraft Command Editor 2跳票了近两年的时间(对不起!!).2021年2月,我重启了MCE项目,并正式命名为Minecraft Command Editor 202 ...