流程控制:可以根据实际情况,进行选择,有了灵h。根据动态条件决定程序执行哪些内容,不执行哪些内容。
1)顺序执行
2)分支执行。它根据条件来判断,进行选择性执行代码。它也是体系核心业务逻辑代码机构。
3)循环执行。反复执行一段代码
3+1,异常执行。对代码级错误进行预先解决方案。
需求:输入一个数字,去做响应事情
输入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;
}
}
}
}
Application Programming Interface 应用程序接口
java给我们提供jdk,提供数万api工具类。
我们无需自己去做,直接调用这些api实现我们自己个性需求。
java提供api,非常丰富,也是java强大原因,它构建软件系统根基。形成生态链。这是其它语言望尘莫及!但是毕竟老了,很多东西不合时宜,但是有第三方的基于java类库junit、ssm这些产品支持,java还生机勃勃!
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 = "[email protected]";
//从上面邮箱地址中拆出用户名和域名
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 = "[email protected]"; //邮箱地址,分隔符@
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] );
}
}
}
王丽莹变成 王*,陈强变成 陈*
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 把字符串,里面有特殊分隔符,按分隔符拆分成数组,可以对数组每个元素进行处理。