java学习-Day04

简单学生系统
//定义一个长度为3的数组,数组存储1-3名学生对象作为初始数据
//要求1 再次加一个学生对象,并在添加时进行学号唯一性判断
//要求2 添加完毕后遍历所有学生信息
//要求3 通过id删除学生信息  存在删除,不存在表示删除失败
//要求4 删除完后,遍历所有学生信息
//要求5 查询数组id为002的学生,如果存在则将他的年龄加一

package Day04;

import java.util.Scanner;

public class StudentTest {
    public static void main(String[] args){

        //定义一个长度为3的数组,数组存储1-3名学生对象作为初始数据
        Student[] studentArray = new Student[4];
        Student s1 = new Student(001,"小姚",18);
        Student s2 = new Student(002,"小张",19);
        Student s3 = new Student(003,"小王",17);
        studentArray[0] = s1;
        studentArray[1] = s2;
        studentArray[2] = s3;
        Student[] arr = idJudgement(studentArray);
        Student[] arr1 = delete(arr,004);
        Student[] arr2 = addAge(arr,002);
        for (int i = 0; i < arr2.length; i++) {
            if(arr[i]!=null){
                System.out.println(arr2[i].getId()+arr2[i].getName()+arr2[i].getAge());
            }

        }
    }

    //要求1 再次加一个学生对象,并在添加时进行学号唯一性判断
    public static Student[]  idJudgement(Student[] arr){
        Student s = new Student();
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入添加对象的id");
        int id = sc.nextInt();
        boolean flag = contains(arr,id);
        if(flag){
            System.out.println("id重复,请修改后输入!");

        }else{
            s.setId(id);
            System.out.println("请输入添加对象的name");
            String name = sc.next();
            s.setName(name);
            System.out.println("请输入添加对象的age");
            int age = sc.nextInt();
            s.setAge(age);
            arr[3] = s;
            return arr;
        }
        return arr;

    }

    //判断是否存在
    public static boolean contains(Student[] arr,int number){
        boolean flag = false;
        for (int i = 0; i < arr.length - 1; i++) {
            if(arr[i].getId()==number){
                flag = true;
            }
        }
        return flag;
    }

    //要求3 通过id删除学生信息  存在删除,不存在表示删除失败
    public static Student[] delete(Student[] arr,int id){
        for (int i = 0; i < arr.length; i++) {
           if(arr[i].getId()==id){
               arr[i] = null;
               return arr;
           }
        }
        System.out.println("不存在要删除的id");
        return arr;
    }

    //要求5 查询数组id为002的学生,如果存在则将他的年龄加一
    public static Student[] addAge(Student[] arr,int id){
        for (int i = 0; i < arr.length; i++) {
            if(arr[i].getId()==id){
                int age = arr[i].getAge()+1;
                arr[i].setAge(age);
                return arr;
            }
        }
        System.out.println("不存在要增加年龄的id");
        return arr;
    }

}

字符串

字符串内容是不会发生变化的,它的对象在创建以后不会改变

1 直接赋值
2 传递字符数组,根据字符数组内容在创建一个新的字符串对象
需求:修改字符串内容   abc   Qbc
3 传递字节数组
需求:把字节信息转成字符串

2和3属于new关键字传教关键对象

字符串比较

==:对于基本数据类型比较的是数据值;对于引用数据类型比较的是地址值。

s1.equals(s2)  s1和s2完全一致为true
s1.equalsIgnoreCase(s2);  忽略大小写

键盘录入模拟账号登陆

                //1 定义正确的用户名和密码
        String rightUserName = "xiaoyao";
        String rightUserPassword = "123456";

           //2 键盘录入模拟登录的用户名密码
        Scanner sc = new Scanner(System.in);
        int count = 1;
        while (count<4){
            System.out.println("请输入用户名密码");
            String userName = sc.next();
            String userPassword = sc.next();
            if(userName.equals(rightUserName)&&userPassword.equals(rightUserPassword)){
                System.out.println("登录成功!");
                break;
            }else{
                if(count==3){
                    System.out.println("输入次数超过3次,您的账号被锁定!");
                    break;
                }
                System.out.println("请重新输入用户名密码,您还剩下"+(3-count)+"次机会!");
                count+=1;
            }
        }
字符串.charAt(索引) --- 表示字符串每个索引
s1.charAt(i)  

统计字符数目

        //统计字符次数
        //大写字母,小写字母,数字分别长度
        String s1 = "XiaoYao12345";
        int bigLetter = 0;
        int smellLetter = 0;
        int number = 0;
        for (int i = 0; i < s1.length(); i++) {
            if(s1.charAt(i)>='0'&&s1.charAt(i)<='9'){
                number+=1;
            }else if(s1.charAt(i)>='a'&&s1.charAt(i)<='z'){
                smellLetter+=1;
            }else if(s1.charAt(i)>='A'&&s1.charAt(i)<='Z'){
                bigLetter+=1;
            }
        }

金额转换

//金额转换

        //1 键盘输入金额
        Scanner sc = new Scanner(System.in);
        int s1;
        while (true){
            System.out.println("请输入要转换的金额");
            s1 = sc.nextInt();
            if(s1>=0&&s1<=9999999){
                break;
            }else {
                System.out.println("输入金额有误");
            }
        }


        //2 查表法  把数据和索引一一对应  根据索引找数据
        String[] arr = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖","拾"};

        //3 得到每一位数字  转成中文
        String res = "";
        while (s1!=0){
            int ge = s1%10;
            res=arr[ge] + res;
            s1 = s1/10;
        }


        //4 在前面补0,补齐七位
        int count = 7-res.length();
        for (int i = 0; i < count; i++) {
            res = "零"+res;
        }
        String result = "";

        //5 加上单位
        String[] arr2 = {"佰","拾","万","仟","佰","拾","元"};
        for (int i = 0; i < arr2.length; i++) {
            result += res.charAt(i)+arr2[i];
        }
        System.out.println(result);

字符串截取  substring :包头不包尾

用ASCII码把字符转为数字   -48

        //敏感词替换

        //1 获取内容
        String talk = "你真6tmdsb";
        //2 定义敏感词库
        String[] arr = {"tmd","nmd","cnm","sb"};
        for (int i = 0; i < arr.length; i++) {
            String s1 = arr[i];
            talk = talk.replace(s1,"***");
        }

        System.out.println(talk);
StringBuilder:容器,创建之后的内容是可以改变的    提高字符串的操作效率(不会创建很多空间                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         )

使用场景:字符串拼接,字符串反转

package Day04;

public class StringBuilderPractice {
    public static void main(String[] args){

        //1 创建对象
        StringBuilder sb = new StringBuilder();

        //2 添加元素
        sb.append("xiaochen");

        //3 反转
        sb.reverse();

        //4 获取长度
        int num = sb.length();

        //5 tostring()
        String str = sb.toString();
        System.out.println(str);
        
        
        
        System.out.println(sb);


    }


}

练习:字符串反转

        //对称字符串
        //键盘输入对称字符串,程序判断是否是对称字符串,并在控制台打印是或不是
        //对称字符串   12321 111


        //1 键盘输入对称字符串
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要判断的字符串");
        String str1 = sc.next();

        //2 程序判断是否是对称字符串
        StringBuilder sb = new StringBuilder();
        String str2 = sb.append(str1).reverse().toString();
        boolean flag = true;
        if(!str1.equals(str2)){
            flag = false;
        }
        System.out.println(flag);

练习:字符串拼接

//拼接字符串
        // int[] arr = {1,2,3}   [1,2,3]

        //1 定义数组
        int[] arr = {1,2,3,4,5,6,7,8,9,10,11,12};
        //2 定义StringBuilder对象
        StringBuilder sb = new StringBuilder();
        sb.append("[");
        for (int i = 0; i < arr.length; i++) {
            if(i!=arr.length-1){
                sb.append(arr[i]).append(",");
            }else{
                sb.append(arr[i]);
            }
        }
        sb.append("]");
        System.out.println(sb.toString());

StringJoiner

StringJoiner sj1 = new StringJoiner("间隔符号");
StringJoiner sj2 = new StringJoiner("间隔符号","开始符号","结束符号");

StringJoiner.add(只能是String类型) 

package Day04;

import java.util.StringJoiner;

public class StringJoinerPractice {
    public static void main(String[] args){

        String[] arr = {"1","2","3"};
        StringJoiner sj1 = new StringJoiner("--");
        StringJoiner sj2 = new StringJoiner(",","[","]");
        for (int i = 0; i < arr.length; i++) {
            sj1.add(arr[i]);
            sj2.add(arr[i]);
        }
        System.out.println(sj1);
        System.out.println(sj2);
    }
}

 字符串的拼接底层原理

拼接时没有变量都是字符串,触发字符串优化机制,在编译时已经是最终结果 没有创建对象

拼接时有变量参与,JDK8以前使用StringBuilder

结论:如果很多字符串变量拼接时,不要直接+,会在底层创建多个对象,浪费时间和性能

String str1 = "abc";
String str2 = "ab";
String str3 = str2+"c";
System.out.println(str1==str3); //false

字符串拼接时有变量

JDK8以前:系统底层自动创建StringBuilder对象,然后再调用append方法进行拼接;拼接后,再调用tostring()方法转换为String类型,而tostring()方法的底层是new了一个字符串对象

JDK8:系统会预估字符串拼接后的总大小,把拼接的内容放在数组中,此时也是产生了一个新的字符串

StringBuilder扩容:老容量*2+2 = 新容量  默认初始容量为16

练习1  罗马数字转换

package Day04;

import java.util.Scanner;

public class Practice {
    public static void main(String[] args){

        //键盘录入一个字符串
        //要求1 长度小于等于9
        //要求2 只能是数字
        //对应关系:Ⅰ:1,Ⅱ:2,Ⅲ:3,Ⅳ:4,Ⅴ:5,Ⅵ:6,Ⅶ:7,Ⅷ:8,Ⅸ:9  罗马数字没有0,如果键盘录入包含0可以变成""

        //键盘录入一个字符串
        Scanner sc = new Scanner(System.in);
        String str1 = "";
        while (true){
            System.out.println("请输入字符串!");
            str1 = sc.next();
            //检验
            boolean check = flag(str1);
            if(check){
                break;
            }else {
                System.out.println("输入格式错误,请输入字符串!");
                continue;
            }

        }

        //
        StringBuilder sb = new StringBuilder();
        String[] arr = {"","Ⅰ","Ⅱ","Ⅲ","Ⅳ","Ⅴ","Ⅵ","Ⅶ","Ⅷ","Ⅸ"};
        for (int i = 0; i < str1.length(); i++) {
            int num = str1.charAt(i)-48;
            sb.append(arr[num]);
        }
        System.out.println(sb.toString());

    }

    //判断是否符号规则
    public static boolean flag(String str1){
        //要求1 长度小于等于9
        if(str1.length()>9){
            return false;
        }

        //要求2 只能是数字
        for (int i = 0; i < str1.length(); i++) {
            if(str1.charAt(i)<'0'||str1.charAt(i)>'9'){
                return false;
            }
        }
        return true;

    }

}
str1.toCharArray()  字符串转换为字符数组
String res = new String(arr);  字符数组转换为字符串

练习2

给定一个字符串s,由若干个单词组成,单词前后用一些字符隔开,返回字符串中最后一个单词长度
public static void main(String[] args){
        //给定一个字符串s,由若干个单词组成,单词前后用一些字符隔开,返回字符串中最后一个单词长度

        //倒序遍历 遇到空格就停
        String s = "hello  world";
        int count = 0;

        for (int i = s.length()-1; i >=0; i--) {
            if(s.charAt(i)!=' '){
                count+=1;
            }else {
                break;
            }
        }
        System.out.println(count);

    }

练习3

给定两个字符串形式表示的非负整数num1和num2,以字符串的形式返回他们的乘积
public static void main(String[] args){
        //给定两个字符串形式表示的非负整数num1和num2
        //以字符串的形式返回他们的乘积
        String str1 = "123";
        String str2 = "234";

        char[] arr1 = str1.toCharArray();
        char[] arr2 = str2.toCharArray();
        int res1 = 0;
        for (int i = 0; i < arr1.length; i++) {
            res1 = res1*10+(arr1[i]-48);
        }
        int res2 = 0;
        for (int i = 0; i < arr2.length; i++) {
            res2 = res2*10+(arr2[i]-48);
        }
        int multiplier = res1*res2;
        System.out.println(multiplier);



    }

练习4

生成验证码五位  数字顺序可以在任何地方
 public static void main(String[] args){
        //生成验证码五位  数字顺序可以在任何地方

        //1 将大写、小写都放在一个数组中  随机获取四次
        char[] arr = new char[52];
        int index = 0;
        for (char i = 'a'; i <='z'; i++) {
            arr[index] = i;
            index+=1;
        }
        for (char i = 'A'; i <='Z'; i++) {
            arr[index] = i;
            index+=1;
        }
        //2 随机获取4次
        Random r = new Random();
        String res = "";
        for (int i = 0; i < 4; i++) {
            int numIndex = r.nextInt(52);
            res+=arr[numIndex];
        }

        //3 随机获取数字 将数字放在验证码末尾
        int num1 = r.nextInt(10);
        res+=num1;
        //4 转为字符数组 将数组最后一位与前面4位进行随机交换
        char[] arrRes = res.toCharArray();
        int numIndex1 = r.nextInt(5);
        char temp = arrRes[arrRes.length-1];
        arrRes[arrRes.length-1] = arrRes[numIndex1];
        arrRes[numIndex1] = temp;
        //5 字符数组转为字符串
        String result =  new String(arrRes);
        System.out.println(result);
    }

练习5

键盘输入任意字符串,打乱里面内容
public static void main(String[] args){

        // 键盘输入任意字符串,打乱里面内容
        String str1 = "12345678aa";
        char[] arr = str1.toCharArray();
        Random r = new Random();
        for (int i = 0; i < arr.length; i++) {
            int num = r.nextInt(str1.length());
            char temp = arr[i];
            arr[i] = arr[num];
            arr[num] = temp;
        }
        String res = new String(arr);
        System.out.println(res);

    }

练习6

给定两个字符A和B,A的旋转操作:将A的最左边字符移动到最右边字符  abcde   ----   bcdea。如果A经过若干次旋转能变成B则返回True,否则false
      public static void main(String[] args){
        //给定两个字符A和B
        //A的旋转操作:将A的最左边字符移动到最右边字符
        //abcde   ----   bcdea
        //如果A经过若干次旋转能变成B则返回True,否则false

        //1 定义两个字符串
        String str1 = "abcdef";
        String str2 = "cdefab";

        //2 A的旋转操作
        boolean flag = false;
        for (int i = 0; i < str1.length(); i++) {
            String str3 = str1.substring(i)+str1.substring(0,i);
            if(str3.equals(str2)){
                flag = true;
                break;
            }
        }
        System.out.println(flag);



    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值