【JAVA学习笔记】52 - 本章作业

项目代码

https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter13/src/com/yinhai/wrapper_/homework_

1.字符反转

【JAVA学习笔记】52 - 本章作业_第1张图片

 注意String是final的不能改变需要toCharArray改成char数组

返回String需要将char改成valueOf改为String

public class HomeWork01 {
    public static void main(String[] args) {
        String str = "0123456789";
        //改变的是char,和str无关
        try {
            System.out.println(reverse(str,1,5));//0543216789
            System.out.println(reverse(str,4,5));//0123546789
            System.out.println(reverse(str,2,5));//0154326789
            System.out.println(reverse(str,7,5));//0154326789
        } catch (Exception e) {
            System.out.println(e.getMessage());
            return;
        }

        //想改变str直接str = rever(str,start,end);即可
    }
    public static String reverse(String str,int start,int end){
        //需要对输入的参数做一个验证
        if(!(str.length() > end && end > start && start > 0 && str!=null)){
            throw new RuntimeException("参数不正确");
        }
        char[] chars = str.toCharArray();//返回的是new的
        char temp;
        for (int i = 0; i < (end - start) / 2 + 1; i++) {
            if(start + i == end + i){
                break;
            }
            temp = chars[start + i];
            chars[start + i]= chars[end - i];
            chars[end - i] = temp;
        }

        String str1 = String.valueOf(chars);
        return str1;
    }
}

 【JAVA学习笔记】52 - 本章作业_第2张图片

和老师的代码原理大差不差

public class Homework01 {
    public static void main(String[] args) {
        //测试
        String str = "abcdef";
        System.out.println("===交换前===");
        System.out.println(str);
        try {
            str = reverse(str, 1, 4);
        } catch (Exception e) {
            System.out.println(e.getMessage());
            return;
        }
        System.out.println("===交换后===");
        System.out.println(str);
    }

    /**
     * (1) 将字符串中指定部分进行反转。比如将"abcdef"反转为"aedcbf"
     * (2) 编写方法 public static String reverse(String  str, int start , int end) 搞定
     * 思路分析
     * (1) 先把方法定义确定
     * (2) 把 String 转成 char[] ,因为char[] 的元素是可以交换的
     * (3) 画出分析示意图
     * (4) 代码实现
     */
    public static String reverse(String str, int start, int end) {


        //对输入的参数做一个验证
        //老韩重要的编程技巧分享!!!
        //(1) 写出正确的情况
        //(2) 然后取反即可
        //(3) 这样写,你的思路就不乱
        if(!(str != null && start >= 0 && end > start && end < str.length())) {
            throw new RuntimeException("参数不正确");
        }

        char[] chars = str.toCharArray();
        char temp = ' '; //交换辅助变量
        for (int i = start, j = end; i < j; i++, j--) {
            temp = chars[i];
            chars[i] = chars[j];
            chars[j] = temp;
        }
        //使用chars 重新构建一个String 返回即可
        return new String(chars);

    }
}

2.异常处理

【JAVA学习笔记】52 - 本章作业_第3张图片

public class HomeWork02 {
    public static void main(String[] args) {
        Person person = new Person();
        while (!person.enterInfo()) {}
    }
}

class Person {
    Scanner scanner = new Scanner(System.in);
    private String name;
    private String password;
    private String mail;

    public Person() {
    }

    public boolean enterInfo() {
        try {
            System.out.println("请输入名字长度为2 3 4");
            judeName(scanner.next());
            System.out.println("请输入六位密码");
            judePassword(scanner.next());
            System.out.println("请输入邮箱,带有@以及.且@在.之前");
            judeMail(scanner.next());

        } catch (Exception e) {
            System.out.println(e.getMessage());
            System.out.println("请重新尝试");
            return false;
        }
        System.out.println("注册成功");
        return true;
    }

    public void judeName(String name) {
        if (2 <= name.length() && name.length() <= 4) {
            this.name = name;
        } else {
            throw new RuntimeException("名字长度错误");
        }
    }

    public void judePassword(String password) {
        char[] chars = password.toCharArray();
            if (chars.length != 6) {
                throw new RuntimeException("密码长度错误");
            }
            for (int i = 0; i < chars.length; i++) {
                if (!(chars[i] < 58 && chars[i] > 47)){
                    throw new RuntimeException("密码包含非数字元素");
                }
            }
        this.password = String.valueOf(chars);
    }

    public void judeMail(String mail) {
        int index1 = mail.lastIndexOf('@');
        int index2 = mail.lastIndexOf('.');
        if (index1 > index2) {
            throw new RuntimeException("格式错误 @必须在.之前");
        }
        if(index1 == -1){
            throw new RuntimeException("格式错误 必须含有@");
        }
        if(index2 == -1){
            throw new RuntimeException("格式错误 必须含有.");
        }

        this.mail = mail;
    }
}

【JAVA学习笔记】52 - 本章作业_第4张图片

 老师的代码

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

        String name = "abc";
        String pwd = "123456";
        String email = "ti@[email protected]";

        try {
            userRegister(name,pwd,email);
            System.out.println("恭喜你,注册成功~");
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }

    }

    /**
     * 输入用户名、密码、邮箱,如果信息录入正确,则提示注册成功,否则生成异常对象
     * 要求:
     * (1) 用户名长度为2或3或4
     * (2) 密码的长度为6,要求全是数字  isDigital
     * (3) 邮箱中包含@和.   并且@在.的前面
     * 

* 思路分析 * (1) 先编写方法 userRegister(String name, String pwd, String email) {} * (2) 针对 输入的内容进行校核,如果发现有问题,就抛出异常,给出提示 * (3) 单独的写一个方法,判断 密码是否全部是数字字符 boolean */ public static void userRegister(String name, String pwd, String email) { //再加入一些校验 if(!(name != null && pwd != null && email != null)) { throw new RuntimeException("参数不能为null"); } //过关 //第一关 int userLength = name.length(); if (!(userLength >= 2 && userLength <= 4)) { throw new RuntimeException("用户名长度为2或3或4"); } //第二关 if (!(pwd.length() == 6 && isDigital(pwd))) { throw new RuntimeException("密码的长度为6,要求全是数字"); } //第三关 int i = email.indexOf('@'); int j = email.indexOf('.'); if (!(i > 0 && j > i)) { throw new RuntimeException("邮箱中包含@和. 并且@在.的前面"); } } //单独的写一个方法,判断 密码是否全部是数字字符 boolean public static boolean isDigital(String str) { char[] chars = str.toCharArray(); for (int i = 0; i < chars.length; i++) { if (chars[i] < '0' || chars[i] > '9') { return false; } } return true; } }

3.字符串的方法使用

public class HomeWork03 {
    public static void main(String[] args) {
        String name = "Yin xiao Hai";
        printName(name);
    }
    public static void printName(String name){
        if(name == null){
            System.out.println("不能为空");
            return;
        }
        //对接受的字符串分割
        String[] str = name.split(" ");
        if (str.length != 3){
            System.out.println("输入的字符串格式不对");
            return;
        }
        System.out.println(String.format("%s,%s .%c" ,str[2],str[0],str[1].toUpperCase().charAt(0)));
    }
}

4. 判断大写小写数字个数

public class HomeWork04 {
    public static void main(String[] args) {
        int countA = 0;
        int counta = 0;
        int countNum = 0;
        //转成数组判断
        String name = "Yinhai#3612";
        //也可以用str.charAt(i)
        char[] names = name.toCharArray();
        for (int i = 0; i < names.length; i++) {
            if (names[i] <= 'Z' && names[i] >= 'A'){
                countA++;
            }
            if (names[i] <= 'z' && names[i] >= 'a'){
                counta++;
            }
            if (names[i] <= '9' && names[i] >= '0'){
                countNum++;
            }
        }
        System.out.println("该字符串共有" + countA + "个大写字母"
                + counta + "个小写字母" + countNum + "个数字");
    }
}

5.字符串的内存分布(多看看)

【JAVA学习笔记】52 - 本章作业_第5张图片

错了一个 没有重写,就是用Object的equals,判断的是地址相等,还错了一个s1==s4看错了,然后就是最后的那个,会使用Builder在常量池内创建新的hellohspedu然后用t1指向value指向该常量池,在前面的String类中有讲,多看看。然后t2直接指向已经有的

public class HomeWork05 {
    public static void main(String[] args) {
        String s1 = "hspedu";
        Animal a = new Animal(s1);
        Animal b = new Animal(s1);
        System.out.println(a == b);
        System.out.println(a.equals(b));
        System.out.println(a.name == b.name);
        String s4 = new String("hspedu");
        String s5 = "hspedu";

        System.out.println(s1 == s4);
        System.out.println(s4 == s5);

        String t1 = "hello" + s1;
        String t2 = "hellohspedu";
        System.out.println(t1.intern() == t2);


    }
}

class Animal {
    String name;

    public Animal(String name) {
        this.name = name;
    }
}

【JAVA学习笔记】52 - 本章作业_第6张图片

你可能感兴趣的:(学习,笔记)