【小白学java】javaAPI工具包:字符串+汉字转+身解析(day05)123

课程链接:共六天

第一天:开发环境:初识java,搭建环境
第二天:语言基础:关键字、变量、常量、运算符
第三天:数据结构:基本类型、包装类型、引用类型(数组和对象)
第四天:流程控制:分支判断、循环迭代、异常处理
第五天:API工具类:字符串方法、身份证解析
第六天:面向对象:封装、继承、抽象、接口

知识回顾

流程控制:可以根据实际情况,进行选择,有了灵h。根据动态条件决定程序执行哪些内容,不执行哪些内容。
1)顺序执行
2)分支执行。它根据条件来判断,进行选择性执行代码。它也是体系核心业务逻辑代码机构。
3)循环执行。反复执行一段代码
3+1,异常执行。对代码级错误进行预先解决方案。

案例

实现ATM机

需求:输入一个数字,去做响应事情
输入1:查询,输入2:取款,输入3:存款,输入4退出

package cn.tedu.flow;

import java.util.Scanner;
import org.junit.Test;

/*
 * 模拟ATM运行过程
 * 需求:用户输入数字 (Scanner java提供监控键盘)
 * 根据用户数字,我们做响应处理,在控制台显示对应操作
 * 1:查询
 * 2:取款
 * 3:存款
 * 4:退出,结束程序
 * other:提示输入错误(潜在需求)
 */
public class ATM {
	@Test
	public void atm() {
		// 1. 获取键盘输入
		// 不在 java.lang.*,需要导包
		// 得到系统监控设备(键盘)System.in 输入设备
		Scanner scanner = new Scanner(System.in);

		// 死循环,for(;;)、while(true)
		while (true) {
			try { // 把可能出现错误的代码放入try中
				int n = scanner.nextInt(); // 把键盘输入的内容转换成整数
				scanner.nextLine();
				
				// 键盘监控,程序运行起来,程序处于阻塞状态(等待)如果没有输入包括回车
				// 程序就傻傻死等,当用户输入值回车后,才会继续运行程序!
				System.out.println("键盘输入:" + n);

				// 多分支,只判断单个值,switch更加简洁
				switch (n) {
				case 1:
					System.out.println("查询");
					break; // 分支执行完成跳出switch语句
				case 2:
					System.out.println("取款");
					break;
				case 3:
					System.out.println("存款");
					break;
				case 4:
					System.out.println("退出");
					return; // 结束程序,实现退出死循环
				// Unreachable code
				// System.out.println("123");
				default:
					System.out.println("输入不正确,请重新输入...");
				}
			} catch (Exception e) { // 捕获异常,程序就不会报错了
				scanner.nextLine();	// 不加死循环,后面还有个换行字符,加此句就把换行处理掉
				System.out.println("出错了:" + e.toString());
				//break;
			}
		}

	}
}


API

Application Programming Interface 应用程序接口
java给我们提供jdk,提供数万api工具类。
我们无需自己去做,直接调用这些api实现我们自己个性需求。

在这里插入图片描述
java提供api,非常丰富,也是java强大原因,它构建软件系统根基。形成生态链。这是其它语言望尘莫及!但是毕竟老了,很多东西不合时宜,但是有第三方的基于java类库junit、ssm这些产品支持,java还生机勃勃!

java有这么多的api从哪里入手?

java的工具类api中,最最常用,使用最频繁字符串相关api

在这里插入图片描述

package cn.tedu.api;

import java.util.Arrays;

import org.junit.Test;

//练习String字符串常见api
public class TestString {
	@Test // 转义字符,后面字符已经不是标准字符,它赋予新的含义
	public void conver() {
		System.out.println("abc \t 123"); // tab展示多个空格,2,4,7字符
		System.out.println("qwe \n iop"); // 回车
	}

	@Test // 字符串连接符方法
	public void concat() {
		System.out.println("abc" + "123");
		System.out.println("abc".concat("123"));
	}

	@Test // 拼串格式化方式
	public void format() {
		String s1 = "abc";
		String s2 = "def";
		String s3 = "awt";
		// 日常开发中拼串最常见方式
		System.out.println("字符串1:" + s1 + ",字符串2:" + s2 + ",字符串3:" + s3);

		// 以format形式,少用。第二参数Object... args 可变参数,多个参数
		System.out.println(
				// %s占位符,有几个占位符,后面就有几个参数,占位符个数参数个数必须一致
				String.format("字符串1:%s,字符串2:%s,字符串3:%s", s1, s2, s3));
	}

	@Test
	public void len() {
		String s1 = "abc";
		String s2 = "def";
		String s3 = "awt";

		String s = "字符串1:" + s1 + ",字符串2:" + s2 + ",字符串3:" + s3;
		System.out.println(s);
		System.out.println(s.length()); // 获取字符串长度

		String a = "a";	
		String c = "中";
		System.out.println(a + " " + a.length()); // 1
		System.out.println(c + " " + c.length()); // 1 早期英文字母占1中文占2个,utf-8都是1
	}

	@Test // 去除字符串两边空格
	public void trim() {
		String s = "   CGB 培优   "; // 在前面、中间、后面都有空格,多个空格
		System.out.println(s.trim());
	}

	@Test // 获取字符串某个位置的字符(字符串字符数组),可以通过下标去获取某个位置的字符
	public void charAt() {
		String s = "特斯拉刹车不灵";
		// 获取字符串第一个字符
		char c1 = s.charAt(0);
		System.out.println("第一个字符:" + c1);

		// 获取字符串最后一个字符
		char c2 = s.charAt(s.length() - 1);
		System.out.println("最后一个字符:" + c2);
	}

	@Test // 获取当前字符串一部分,称为子串
	public void substring() {
		String s = "天生我有才";
		// 获取字符串:我
		System.out.println( s.substring(4, 7) );

		// 获取字符串:有才(假定当前字符串不变)
		System.out.println( s.substring(s.length()-2) );	//一个参数就截取字符串到最后
	}
	
	@Test //字符串转换大小写
	public void tocase() {
		String s = "tonyChan";
		//转大写
		System.out.println( s.toUpperCase() );
		
		//转小写
		System.out.println( s.toLowerCase() );
		
		//首字母大写
		//获取首字母charAt,拼接后面部分 substring(1)
		//利用字符和空串拼串得到结果字符串类型,它有toUpperCase()方法,字符是没有这个方法的
		String str = (s.charAt(0)+"").toUpperCase() + s.substring(1);
		System.out.println(str);
	}
	
	@Test	//indexOf,某个子串所出现位置(下标)从左到右搜索;lastIndexOf,从右往左搜索
	public void index() {
		String s = "bbbabcdabcabcd";
		//搜索abc它的位置,一次indexOf,搜索第一次位置
		System.out.println( s.indexOf("abc") );
		
		//搜索abc它的位置,一次lastIndexOf,搜索最后一个位置
		System.out.println( s.lastIndexOf("abc") );
		
		String email = "tony@tedu.cn";	
		//从上面邮箱地址中拆出用户名和域名

		int pos = email.indexOf("@");		//先记录下字符的索引的位置
		System.out.println("@的位置:" + pos);
		//用户名
		System.out.println( email.substring(0,pos) );
		
		//域名
		System.out.println( email.substring(pos+1) );
	}
	
	@Test	//前缀和后缀判断
	public void with() {
		String filename = "bigdata-trainingday05.doc";
		//判定是否某个前缀开头
		String prefix = "cgb-";
		System.out.println( filename.startsWith(prefix) );
		
		//判断是否某个后缀结束
		String suffix = ".md";
		System.out.println( filename.endsWith(suffix) );
		
		//判断文件是否为doc文档文件
		if( filename.endsWith(".doc") ) {
			System.out.println("这是一个word文档文件");
		}else {
			System.out.println("这不是一个word文档文件");
		}
	}
	
	@Test	//替换
	public void replace() {
		String s = "a.b.c.d.e";
		//把字符串中的点替换逗号,第一参数旧的内容,第二参数新的内容,替换
		System.out.println( s.replace(".", ",") );		//对的
		
		System.out.println( s.replaceAll(".", ","));	//变成都是.?第一参数语法满足正则表达式 regex
		
		//如果参数是正则表达式的符号,必须转义,\自己也被正则征用,加\\代表一个转义字符
		//Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ )
		//第一个斜杠代表转义,第二个斜杠正则里的斜杠,语法必须写两个
		System.out.println( s.replaceAll("\\.", ","));
	}
	
	@Test	//拆串,根据字符串中分隔符,把现有字符串变成字符串数组,有几个分隔符,分隔符数量+1个数组元素
	public void split() {
		String email = "tony@tedu.cn";	//邮箱地址,分隔符@
		String[] emails = email.split("@");	//拆出数组
		//打印数组
		System.out.println( Arrays.toString(emails) );  //利用工具类型的方法把数组转换成字符串,打印
		
		//由一个数组获取每个值
		String score = "100,99,60";		//doc,docx,ppt,pptx,execl,excelx,mp4,avi
		String[] scores = score.split(",");
		//另外一种方式:for循环,遍历数组
		for(int i=0; i< scores.length; i++) {
			//每次循环i的值在变,代表当前数组的索引
			System.out.println( scores[i] );
		}
	}
	
}











案例

1、姓名被*替代

王丽莹变成 王*,陈强变成 陈*

package cn.tedu.api;

import org.junit.Test;

//把多个名字转成 姓*的形式
public class TestName {
	@Test
	public void names() {
		String name = "王丽莹、陈强、李琦、张三";
		//1、把字符串拆串 split
		String[] names = name.split("、");
		
		//2、遍历数组获取数组的每个元素 for
		for( int i=0; i< names.length; i++ ) {
			//3、获取首字母拼接*,打印
			String str = names[i].charAt(0) + "*";
			System.out.println(str);
		}
	}
}

解析

package cn.tedu.api;

import org.junit.Test;

/*
 * 解析:
 * 规则:18位,6位地区,8位出生年月,3顺序码,奇数男,偶数女,1校验码
 */
public class TestCardNo {
	@Test
	public void cardNo() {
		String cardNo = "610113198009082113";		//身号
		//地址码
		System.out.println("地址码:" + cardNo.substring(0, 6));
		
		//出生年月:xxxx年x月x日
		String s = cardNo.substring(6, 14);
		String year = s.substring(0, 4);
		
		String month = s.substring(4,6);
		int m = Integer.parseInt(month);		//api 把字符串类型转换int整型
		System.out.println("月份:"+m);
		
		String day = s.substring(6,8);
		int d = Integer.parseInt(day);			//api 把字符串类型转换int类型
		
		//小技巧:整数:007,打印7;把字符串转换整数09字符串整数9,然后字符串拼接
		System.out.println("出生年月:"+year + "年"+ m+"月"+d+"日");
		
		//性别,3位校验位,最后一位为奇数男,为偶数女
		//思路,先拿到校验位的最后一位,转换整数,对2取余,余数为1男,余数为0女
		String last = cardNo.substring( cardNo.length()-2, cardNo.length()-1 );	//倒数第二位字符串
		System.out.println("校验位最后一位:" + last);
		int sex = Integer.parseInt(last);
		if( sex % 2 ==1) {
			System.out.println("性别:男");
		}else {
			System.out.println("性别:女");
		}
	}
}

总结:

java API (jdk,java se)应用程序接口,利用它程序员就无需写底层实现,直接使用它就可以操作计算机相关资源。处理类型转换。
开发中使用最频繁字符串 String,专门对字符串方法进行研究学习。这些api必须会,熟知作用,参数,返回值,达到效果。

1)转义字符:输入字符被征用 \t 代表tab键,\n 代表回车,本身tab键和回车不可见字符,利用这种方式表达这种不可能字符处理。它标准ascii,查询手册。
2)字符串两种连接方式:+,concat
“abc”.concat(“123”);
2)format格式化方式特点,占位符 %s
format(“abc”, String … args)
第二参数叫做变长参数,代表多个参数,1~n,前面字符串形式无需用+拼接,直接就是一个字符串
3)length 长度
不同对象类型,同样是length,有的是方法length(),有的是属性length。
以前字符集,英文占1个位置,汉字占2个位置,现今字符集统一,英文和汉字都只占1个位置。
4)trim 去掉字符串两边空格,支持多个
5)charAt 获取某个下标的字符,String本质字符数组 value[]
6)toUpperCase 转大写、toLowerCase 转小写
7)substring 截取字符串
两种写法:
a. 一个参数,beginIndex 起始位置,到最后结束(截取尾巴)
b. 两个参数,beginIndex,endIndex 起始位置,结束位置(截取开头、中间)
8) indexOf和lastIndexOf()
获取某个字符的位置,有了这个配置配合substring截串
9)startsWith和endsWith
前缀 prefix,后缀 suffix,判断
10)replace 替换(推荐)
replaceAll (替换多个)和replaceFirst(替换一个)参数字符串,不是普通字符串,正则表达式 regex
方便匹配,转义,.被征用,用\.使用
11)split 把字符串,里面有特殊分隔符,按分隔符拆分成数组,可以对数组每个元素进行处理。

评论 17
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值