例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] 类库例题的更多相关文章

  1. Java 类库和常用类库

    Java 类库概念: Java 的应用程序接口 (API) 以包的形式来组织,每个包提供了大量的相关类.接口和异常处理类,这些包的集合就是 Java 的类库 包名以 Java 开始的包是 Java 核 ...

  2. [Liferay6.2]启动Tomcat提示APR不能在java类库路径中被找到的解决办法

    问题描述 启动liferay之后,在控制台中打印出会打印出以下信息: 信息: The APR based Apache Tomcat Native library which allows optim ...

  3. 介绍4款json的java类库 及 其性能测试

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 易于人阅读和编写.同时也易于机器解析和生成. 它基于JavaScript Programming Lan ...

  4. 关于ECharts Java类库的一个jquery插件

    在项目中开发图表功能时用到了Echars和一个关于Echars的java类库(http://git.oschina.net/free/ECharts).这个类库主要目的是方便在Java中构造EChar ...

  5. java类库

    Java的应用程序接口(API)以包的形式来组织,每个包提供大量的相关类.接口和异常处理类,这些包的集合就是Java的类库. Java类库可以分为两种 包名以java开始的包是Java核心包(Java ...

  6. Effective Java 第三版——59. 熟悉并使用Java类库

    Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...

  7. 词典的实现(3)--使用JAVA类库ArrayList实现Map数据结构

    1,在词典的实现(2)-借助顺序表(数组)实现词典文章中使用了自定义的数组代替ArrayList,并实现了Map数据结构的基本功能.而借助JAVA类库ArrayList类的一些方法可以更加容易地实现M ...

  8. 使用Java类库POI生成简易的Excel报表

    使用Java类库POI生成简易的Excel报表 1.需求 1.数据库生成报表需要转义其中字段的信息.比如 1,有效 2.无效等 2.日期格式的自数据需要转义其格式. 3.标题的格式和数据的格式需要分别 ...

  9. Java类库和常用类库介绍

    Java 类库概念: Java 的应用程序接口 (API) 以包的形式来组织,每个包提供了大量的相关类.接口和异常处理类,这些包的集合就是 Java 的类库 包名以 Java 开始的包是 Java 核 ...

随机推荐

  1. Android学习之活动的最佳实践

    •问题的起源 先来模拟一个场景:打开一个 App,最先映入眼帘的是主活动(MainActivity),在该活动中给用户提供了一个 Button, 用户点击该 Button 实现由 MainActivi ...

  2. Keepalived+Nginx高可用实例

    Keepalived+Nginx高可用实例 注意事项: 1.VIP不需要在服务器网络配置文件中配置. 2.nginx主不可用时,需要kill掉nginx主的keepalived服务,这样才可以实现VI ...

  3. CSS 常用样式 – 背景属性

    一.背景颜色 background-color 属性名:background-color 作用:在盒子区域添加背景颜色的修饰 加载区域:在 border 及以内加载背景颜色 属性值:颜色名.颜色值 & ...

  4. Spring Security Oauth2 认证(获取token/刷新token)流程(password模式)

    https://blog.csdn.net/bluuusea/article/details/80284458

  5. vue+quasar+electron+springboot+mysql撸一个TODO LIST 看板

    先看效果 写本项目的目的有几点: 学习下vue+electron桌面开发 学习下java和spring开发(本人一直使用PHP) 一直缺少一款能适合自己的TODO LIST软件,能有桌面端的 可直接打 ...

  6. 「Unity卡牌自走棋」项目NABCD分析

    项目 内容 这个作业属于哪个课程 2021学年春季软件工程(罗杰 任健) 这个作业的要求在哪里 团队项目-初次邂逅,需求分析 在这个课程的目标是 锻炼在大规模开发中的团队协作能力 这个作业在哪个具体方 ...

  7. Kickdown UVA - 1588

    A research laboratory of a world-leading automobile company has received an order to create a specia ...

  8. Day16_91_通过反射机制获取父类和父接口

    通过反射机制获取父类和父接口 * 代码: import java.net.InterfaceAddress; public class ReflectTest14 { public static vo ...

  9. ThinkPHP5 利用.htaccess文件的 Rewrite 规则隐藏URL中的 index.php

    1.首先修改Apache的httpd.conf文件. 确认httpd.conf配置文件中加载了mod_rewrite.so 模块,加载的方法是去掉mod_rewrite.so前面的注释#号 讲http ...

  10. 浅谈程序设计和C语言

    学前必备知识 程序:一组计算机能识别和执行的指令. 计算机语言:计算机工作基于二进制,计算机只能识别和接受由0和1组成的指令. 计算机能直接识别和接受的二进制代码称为机器指令.机器指令的集合就是该计算 ...