【小白学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
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值