4、String操作&Foreach&Char
一、String操作
String str = "张三, 李四, 王五, 赵六"; //第2个人是谁? //一共有多少人? //名字中带"三"的人,是哪些? //姓"李"的人,有哪些?
public class StringDemo { public static void main(String[] args) { m03(); } public static void m03(){ String str = "张三, 李四, 王五, 赵六"; //split() 作用:将字符串按照某些规则,拆分为一个数组 String[] names = str.split(",");//["张三", "李四", "王五", "赵六"] //一共有多少人? int count = 0; for (int i = 0; i < names.length; i++) { count ++; } System.out.println("一共有:" + count + "人"); System.out.println(------------------------------------------------); } ///姓"李"的人,有哪些? for (int i = 0; i < names.length; i++) { String name = names[i]; //筛选 & 输出 if(name.startsWith("李")){ System.out.println(name); System.out.println(------------------------------------------------); } } for (int i = 0; i < names.length; i++) { String name = names[i]; if(name.contains("三")){ System.out.println(name); System.out.println(------------------------------------------------); } } }
例1:
String[] str = {"张三-18","李四-22","王五-21","赵六-20"}; //找出年龄在 20岁以上的人?
代码:
public class StringDemo02 { public static void main(String[] args) { String[] infos = {"张三-18","李四-22","王五-21","赵六-20"}; //遍历 for (int i = 0; i < infos.length; i++) { String info = infos[i]; //使用split() 将字符串拆分为数组["张三","18"] String[] arrs = info.split("-"); //Integer.parseInt() 将字符串转换为数值 int age = Integer.parseInt(arrs[1]); if(age >= 20){ //输出年龄在 20岁以上的人 System.out.println(info); } } } }
练习:
String[] strs = {"张三-18","李四-33","王五-21","赵六-20"} //计算所有人的总年龄//计算所有人的平均年龄
代码:
public class StringDemo03 { public static void main(String[] args) { String[] strs = {"张三-18","李四-33","王五-21","赵六-20"}; int sumOfAge = 0; for (int i = 0; i < strs.length; i++) { String[] info = strs[i].split("-"); int age = Integer.parseInt(info[1]); sumOfAge += age; } double averageOfAge = (double) (sumOfAge / strs.length); System.out.println("所有人的总年龄是" + sumOfAge); System.out.println("所有人的平均年龄是" + averageOfAge); } }
二、高级For循环
高级地方:1、规避使用下标进行遍历的场景 2、结构更加的简单
语法结构:
for(数据类型 变量名: 数组){}
示例:
public class ForDemo { public static void main(String[] args) { int[] nums = {11,34,23,22,21}; //这种直接根据:元素来进行遍历 for(int a : nums){ System.out.println(a); } } }
当多个条件参与筛选的时候,需要使用到逻辑运算符 && || !
&& 逻辑和 代表 多个条件必须要同时满足
|| 逻辑或 代表 多个条件任意满足其中的一个
! 逻辑非 代表取反
public class ForDemo { public static void main(String[] args) { int[] nums = {24,11,23,48,28}; //筛选出所有能被 4 整除的数据,还要被7整除 for (int num : nums) { if ((num % 4 == 0) && (num % 7 == 0)){ System.out.println(num); } } } } public class ForDemo { public static void main(String[] args) { int[] nums = {24,11,23,48,28}; for (int num : nums) { //找出不能被 4 整除的数据,需要使用逻辑非 if (!(num % 4 == 0)){ System.out.println(num); } } } }
三、char
新的数据类型
public class ForDemo { public static void main(String[] args) { m1(); } public static void m1(){ String name = "张三"; char a = 'a'; char b = 'b'; System.out.println(a > b); } }
说明:
1、多个字符,组合起来就构成了字符串
2、单个字符中,只能存放1个符号
3、字符使用单引号进行编程,字符串使用双引号进行编程
4、字符串不能参与比较,但是字符是可以参与比较的
ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统!
原因是:Java平台将 字符 转换 对应的 10进制,然后再进行比较!
String str = "1werAEWRQ2Sasdb3";//有多少个字符?//有多少个数字?//有多少个小写字母?//有多少个大写字母?
代码:
public static void main(String[] args) { String str = "1werAEWRQ2Sasdb3"; //有多少个字符? System.out.println(str.length()); //将字符串 转换为 字符数组 char[] arrs = str.toCharArray(); //['1','w','e','r'……] //定义3个计数器 int c01 = 0,c02 = 0,c03 = 0; //遍历 for (char c : arrs) { if(c >= '0' && c <= '9'){ c01 ++;//数字 } if(c >= 'A' && c<= 'Z'){ c02 ++;//大写 } if(c >= 'a' && c<= 'z'){ c03 ++;//小写 } } System.out.println("数字有: " + c01); System.out.println("大写有: " + c02); System.out.println("小写有: " + c03);}
5、IF分支介绍&遍历&筛选&统计
刚刚的代码:
public static void main(String[] args) { String str = "1werAEWRQ2Sasdb3"; //有多少个字符? System.out.println(str.length()); char[] arrs = str.toCharArray();//['1','w','e','r'……] //定义3个计数器 int c01 = 0,c02 = 0,c03 = 0; //遍历 for (char c : arrs) { if(c >= '0' && c <= '9'){ c01 ++;//数字 } if(c >= 'A' && c<= 'Z'){ c02 ++;//大写 } if(c >= 'a' && c<= 'z'){ c03 ++;//小写 } } System.out.println("数字有: " + c01); System.out.println("大写有: " + c02); System.out.println("小写有: " + c03);}
说明:IF单分支不具备“排它性”的
介绍:IF的分支
语法:
if(条件){ //业务代码 } //双分支 if(条件){ //业务代码1 }else{ //业务代码2 } //多分支 if(条件1){ //业务代码1 }else if(条件2){ //业务代码2 }else if(条件3){ //业务代码3 }……else if(条件n){ //业务代码n }else{ //业务代码 }
多分支最大的好处:提升控制流程的 性能!
一、数组的最值
需求:int[] nums = {23,11,34,21,30}
求:最大值,最小值是多少?
public class ForDemo { public static void main(String[] args) { m5(); } public static void m5(){ int[] nums = {23,11,34,21,30}; //默认 0 号元素,最大 int max = nums[0]; for (int i = 1; i < nums.length; i++) { if(max < nums[i]){ max = nums[i]; } } System.out.println("最大值:" + max); } }
二、人机交互
public static void main(String[] args) { int a = 5; int b = 6; //问电脑要结果! System.out.println( a + b ); }
注意:一个正常的程序,绝对不只有 问电脑要结果,还应该给数据!
public static void main(String[] args) { System.out.println("请输入一个小数:"); double pi = new Scanner(System.in).nextDouble(); System.out.println(pi); } public static void m7(){ System.out.println("请输入一个字符串:"); String str = new Scanner(System.in).next(); System.out.println(str); } public static void m6(){ System.out.println("请输入第1个数值:"); //输入一个数值 int a = new Scanner(System.in).nextInt(); System.out.println("请输入第2个数值:"); int b = new Scanner(System.in).nextInt(); //问电脑要结果! System.out.println( a + b ); }
总结
1、增强for循环,以元素为单位进行循环;普通for,以下标为单位进行循环;
2、String 类:startsWith() endWitn() contains() equals() split() toCharArray()
3、IF分支:单分支 双分支 多分支
4、逻辑运算符:&& || !
5、键盘输入事件: new Scanner(System.in).next*();