案例一 :判断输入登录信息的对错 (仅限三次)
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