day07 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值