day08 java 中的String类的重点案例
案例一 :判断输入登录信息的对错 (仅限三次)
package com.itheima.demo3_字符串的特点; import java.util.Scanner; /** * @author ChenY@itheima.com * @date 2022/7/10 21:01 */ public class Simple { public static void main(String[] args) { String T_user = "admin"; String T_pass = "admin123"; Scanner sc = new Scanner(System.in); /** 循环三次*/ for (int i = 0; i < 3; i++) { System.out.println("请输入你的账户"); String str1 = sc.next(); System.out.println("请输入你的密码"); String str2 = sc.next(); /** 判断字符串内容是否相等*/ boolean res1 = str1.equals(T_user); boolean res2 = str2.equals(T_pass); if (res1 && res2) { System.out.println("登录成功"); break; } else { if (i != 2) { System.out.println("账号或密码输入错误,请重新输入,你还有" + (2 - i) + "次机会"); } else { System.out.println("请联系管理员"); } } } } }
总结 字符串的内容比较用equal()方法
要循环判断的内容 要放在循环体中 (包括第一次循环 )在循环体里面做判断 if....else....嵌套 成功就break掉,flase 就继续在循环里面判断
案例 二 字符串的遍历
package com.itheima.demo4_字符串的遍历; /** * @author ChenY@itheima.com * @date 2022/7/10 21:47 */ public class Test { public static void main(String[] args) { /** 调用charAt(index) 方法 获取指定索引处的 字符*/ String str = "Hello world"; for (int i = 0; i < str.length(); i++) { char ch = str.charAt(i); System.out.print(ch); } } }
length() + charArt()方法 实现
案例三 统计字符串中的字符 确定字符串中的大写、小写和数字字
首先 遍历字符串是没得说
遍历出来的字符串进行区间判断 ch>-‘A’.....类似 将遍历出来的字符和这些字符比较 ,在比较的背后,基本类型参与数***算会自动提升类型(自动类型转换)
package com.itheima.demo6_统计字符; import java.util.Scanner; /** * @author ChenY@itheima.com * @date 2022/7/11 18:02 */ public class Test { /** * 字符 可以直接和A~Z,a~z,1~9比较大小 */ public static void main(String[] args) { int i = 0, j = 0, k = 0; System.out.println("请输入一个字符"); Scanner sc = new Scanner(System.in); String str = sc.next(); /** 将字符串 遍历出 字符 具体方法请查阅api*/ for (int m = 0; m < str.length() ; m++) { char ch = str.charAt(m); if (ch >= 'a' && ch <= 'z') { i++; }else if(ch >= 'A' && ch <= 'Z'){ j++; }else if (ch >= '0' && ch <= '9'){ k++; } } System.out.println("大写字母字符有"+j+"个"); System.out.println("小写字母字符有"+i+"个"); System.out.println("数字字符有"+k+"个"); } }
案例四 :字符串的拼接不调用方法)
==先遍历出来字符串中的字符,在遍历的时候定义一个空字符串 ,让每次循环的时候 遍历出来的字符和空字符 + 完成拼接
package com.itheima.Demo7_字符串拼接与反转; /** 定义一个方法,把int数组中的数据按照指定的格式拼接成一个字符串返回,调用该方法,并在控制台输出结果。 例如,数组为int[]arr={1,2,3};, /** * @author ChenY@itheima.com * @date 2022/7/11 19:29 */ public class Test1 { public static void main(String[] args) { int[] arr = {1,2,3,4,5,6,7,8,9,10}; System.out.println(append(arr)); } /** 定义方法 用于遍历出数组中的元素 在返回和字符串 相拼接*/ public static String append(int[] arr){ /** 执行方法后的输出结果为:[1,2,3]*/ String str = "["; for (int i = 0; i < arr.length; i++) { if(i!=arr.length-1){ str = str+arr[i]+","; /** 字符串的拼接*/ }else{ str = str+arr[arr.length-1]+"]"; /** 字符串的拼接*/ } } return str; /** 在自定义的方法执行结束后 返回*/ } }
案例五 :字符串的反转(倒序遍历+拼接)
package com.itheima.Demo7_字符串拼接与反转; /** * 字符串的反转: 倒序遍历+拼接 */ import sun.applet.Main; /** * @author ChenY@itheima.com * @date 2022/7/11 20:13 */ public class Tese3 { public static void main(String[] args) { int[] arr = {1,2,3}; System.out.println(reserve(arr)); } /** 字符串的反转 利用倒叙+拼接实现 */ public static String reserve(int[] arr){ String str = ""; /** 倒序遍历*/ for (int i = arr.length-1; i >= 0; i--) { str=str.concat(arr[i]+""); } return str; } }
案例六 字符串的反转(StringBuiler 实现)
package com.itheima.Denop10_字符串的拼接与反转;
/** 定义一个方法,实现字符串反转。键盘录入一个字符串,调用该方法后,在控制台输出结果
例如,键盘录入abc,输出结果 cba*/
import java.util.Scanner;
/**
* @author ChenY@itheima.com
* @date 2022/7/11 23:37
*/
public class Test3 {
public static void main(String[] args) {
System.out.println("请输入一个字符串");
Scanner sc = new Scanner(System.in);
String str = sc.next();
String res1 = reserve1(str);
System.out.println(res1);
}
/** 定义方法 用于反转*/
public static String reserve1(String str1){
StringBuilder sb = new StringBuilder(str1);
sb.reverse(); /** 调用StringBuiler 的反转方法*/
return sb.toString();
}
}
案例七 字符串拼接(StringBuiler 调用方法实现)
package com.itheima.Denop10_字符串的拼接与反转; /** * 定义一个方法,把int数组中的数据按照指定的格式拼接成一个字符申返回,调用该方法,并在控制台输出结果。 * 例如,数组为int[]arr={1,2,3};,执行方法后的输出结果为:[1,2,3] */ /** * @author ChenY@itheima.com * @date 2022/7/11 23:19 */ public class Test2 { public static void main(String[] args) { int[] arr ={1,2,3,4,5,6,7,8,9}; String s1 = append1(arr); System.out.println(s1); } /** 定义方法 返回值类型为 String*/ public static String append1(int[] arr) { /** 创建StringBuild 对象 利用append 方法 链式拼接*/ StringBuilder sb = new StringBuilder(); System.out.print("["); for (int i = 0; i < arr.length; i++) { if (i != arr.length - 1) { sb = sb.append(arr[i]).append(", "); /** StringBuild 对象可以链式拼接*/ } else { sb = sb.append(arr[i]).append("]"); } } /** sb此时为 StringBuild 类型 返回值 是String类型 故需要转换*/ return sb.toString(); } }
案例八 验证码的生成 (超级重点)
package com.itheima.Demo11_Homework03; import java.util.Random; import java.util.Scanner; /** * @author ChenY@itheima.com * @date 2022/7/12 22:26 */ public class Test111 { public static void main(String[] args) { while (true){ String myRandNum = getRandomNumber(); System.out.println("请输入下面的验证码\t"+myRandNum); Scanner sc = new Scanner(System.in); String yourNumber = sc.next(); /** 比较 不区分大小写*/ boolean res = myRandNum.equalsIgnoreCase(yourNumber); if(res==true){ System.out.println("验证码输入正确"); break; }else{ System.out.println("验证码输入错误,请重新输入"); } } } public static String getRandomNumber() { /** 定义可变字符串 方便后面的拼接*/ StringBuilder sb = new StringBuilder(); /** 让字符循环起来 三次循环结束后 sb凭借在一起 共有26+26+10=62为字符ABCD.....Zabcd.......z0.........9*/ for (char ch1 = 'A'; ch1 <= 'Z'; ch1++) { sb.append(ch1); /** sb是空 拼接*/ } for (char ch2 = 'a'; ch2 <= 'z'; ch2++) { sb.append(ch2); } for (char ch3 = '0'; ch3 <= '9'; ch3++) { sb.append(ch3); } /** 保证每个位置 3个字符出现的概率是一样的*/ Random rd = new Random(); String code = ""; /** 从ABCD.....Zabcd.......z0.........9 52位字符上取4个 */ for (int i = 0; i < 4; i++) { int index = rd.nextInt(sb.length()); /** nextInt(sb.length()) 用于返回 0~sb.length 之间是的数 包头不包尾巴。*/ /** sb.length共62位 code每次循环一次遍历 一次*/ code += sb.charAt(index); /** 返回此序列中指定索引处的 char 值 拼接*/ } return code; } }
总结 随机数是由大小写字母,数字组成的 为了体现随机(概率足够低的特点)
先定义一个可变的空字符串,在依次遍历大写字符,小写字符,数字字符 每次遍历的时候都要拼接一个sb.append(i) 最后生成A。。。。。Za。。。。。。z0。。。。。。。。9长度为62位的字符串
循环 生成(0-62,包头不包尾)的4个随机 int 类型的整数 作为索引
再调用charArt()方法 获取指定索引位置上的字符 最后和空字符拼接
对于不知道判断次数的判断,利用while死循环+break
注意和和案例一类比,也让第一次判断就进循环 if.....else....嵌套,true就break 结束循环,false就继续循环注意是在循环体里面终止循环‘
案例九:我国的居民身份证号码,由十七位数字本体码和一位数字校验码组成。请定义方法判断用户输入的身份证号码是否合法,并在主方法中调用方法测试结果。规则为:号码为18位,不能以数字0开头,前17位只可以是数字,最后一位可以是数字或者大写字母X
package com.itheima.Homework; /** * 我国的居民身份证号码,由十七位数字本体码和一位数字校验码组成。 * 请定义方法判断用户输入的身份证号码是否合法,并在主方法中调用方法测试结果。 * 规则为:号码为18位,不能以数字0开头,前17位只可以是数字,最后一位可以是数字或者大写字母X。 */ import com.itheima.demo5_用户登录案例.Test; import java.text.BreakIterator; import java.util.Scanner; /** * @author ChenY@itheima.com * @date 2022/7/12 23:04 */ public class Test6 { public static void main(String[] args) { System.out.println("请输入一个身份证号码"); Scanner sc = new Scanner(System.in); String number = sc.next(); boolean res = isRight(number); if(res==true){ System.out.println("输入合法"); }else{ System.out.println("输入不合法"); } } /** * 定义方法 用于判断 是否合法1参数传递位str 返回值类型为 bool */ public static boolean isRight(String anumber) { /** 号码为18位,不能以数字0开头,前17位只可以是数字,最后一位可以是数字或者大写字母X。*/ if (anumber.length() !=18) { System.out.println("身份证输入不合法"); return false; } else { for (int i = 0; i < anumber.length(); i++) { char ch = anumber.charAt(i); if (anumber.charAt(0) == '0') { return false; } else if (ch > '9' && ch < '0' ) { return false; }else if(anumber.charAt(17) != 'X') { return false; } } } return true; } }
要点总结:if.......else....嵌套中当有多个条件限制的时候
判断语句写flase 一面 返回false ,方法结束的最后 return true