一、API概念

API就是封装的具体体现,API就是封装之后暴露的使用方式

框架:技术的解决方案

二、String类

字符串有个私有属性:private final char value[]

说明了:

1.字符串是常量,创建之后不能改变

2.使用+符号拼接,每次都是在创建新的字符串

3.字符串是由字符数组组成的

char提升为int,按照序号位置提升


编码:将文字按照编码集转为字节表示

解码:将字节按照编码值转为文字显示

utf-8收集了世界上所有的文字,用三个字节表示汉字

getBytes()编码方法

String(byte[] bytes, Charset charset) 通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 String。

String(byte[])解码方法

String(byte[] bytes, String charsetName) 通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 String。

哪张编码集编码就用哪张解码,不然就会乱码

三、字符串常量池

概念:为了减少内存开销,让字符串对象得到复用

字符串常量池在方法区中

“ ”引用的字符会放到常量池中,+拼接的也会放到常量池中

字符变量+""放在堆中,字符变量+字符变量放在堆中

String.next()不支持空格,遇到空格就停止录入

String.nextLine()支持空格

四、习题

第一题:
        在登录注册页面中,除了用户名和密码外,通常也会包含验证码。
        验证码是用来区分用户是计算机还是人,防止恶意破解密码、刷票、灌水等行为。
        在判断验证码时一般不区分大小写。
        请编写程序模拟验证码的判断过程,如果输入正确,给出提示,结束程序。
        如果输入错误,给出提示,验证码刷新,重新输入,直至正确为止。
public static void main(String[] args) {
        while(true) {
            String verficaton = getVerficationCode();
            System.out.println("验证码为:" + verficaton);
            Scanner sr = new Scanner(System.in);
            System.out.println("请输入验证码:");
            String user = sr.next();
            if (user.equalsIgnoreCase(verficaton)) {
                System.out.println("验证成功!");
                break;
            }
            System.out.println("验证失败,重新验证!");
            System.out.println("------------------");
        }

    }

    //生成4位验证码,范围是数字、字母大小写
    public static String getVerficationCode(){
        Random sc=new Random();
        String code="";
        for (int i = 0; i < 4; i++) {
           int num=sc.nextInt(128);
            char c;
            if(('a'<=num&&num<='z')||('A'<=num&&num<='Z')||('0'<=num&&num<='9')){
                c=(char)num;
                code+=c;
            }else {
                i--;
            }
        }
        return code;
    }
第二题:
        现有如下文本:"Java语言是面向对象的,Java语言是健壮的,Java语言是安全的,Java是高性能的,Java语言是跨平台的"。
        请编写程序,统计该文本中"Java"一词出现的次数。
public static void main(String[] args) {
        String str="Java语言是面向对象的,Java语言是健壮的,Java语言是安全的,Java是高性能的,Java语言是跨平台的";
        int cout=getNmuberTimes(str,"Java");
        System.out.println(cout);
    }
   //计算一个字符串在另一个字符串里出现的次数
    public static int getNmuberTimes(String str,String str1){
        int cout=0;  //计数变量
        int start=str1.charAt(0); //  要查找字符串的首个字符的序号
        int sum=0;  //序号总和
        for(int i=0;i<str1.length();i++){    //计算要查找的字符串在utf-8中的序号总和
            sum+=str1.charAt(i);
        }
        for(int i=0;i<str.length();i++){    //遍历整个字符串
            int num=0;
            if(start ==str.charAt(i)){    //第i个字符和查找字符串的首个字符相等
                for(int j=0;j<str1.length();j++){ //向后循环查找字符串的长度
                    num+=str.charAt(i+j);
                }
                if(num==sum){  //如果两个数的总和相等,就证明有一次
                    cout++;
                }
            }
        }
        return cout;
    }