API&字符串


一、什么是API

  API(Application Programming Interface):应用程序编程接口

  java提供了API和API帮助文档,帮助程序员更好的理解和使用api

二、常用字符串类

  String,StringBuilder,StringJoiner,StringBuffer,Pattern,Matcher

1.String

  String的注意点:

    1.字符串的内容是不会发生变化的,它的对象在创建后不能被更改,当想要改变时会产生一个新的字符串

  创建String对象的两种方法:

    1.直接赋值
        String s1 = "abc";
        System.out.println(s1);
    2.new(空参,传入字符串,字符数组,字节数组都可以)
//空参
        String s2 = new String(); // ""
        System.out.println("1" + s2 + "2");
//字符串
        String s3 = new String("abc");
        System.out.println(s3);
//*字符数组
        char[] chs = {'a', 'b', 'c', 'd'}; //当你需要修改字符串时,可以转为字符数组再修改
        String s4 = new String(chs);
        System.out.println(s4);
//*字节数组
        byte[] bytes = {97,98,99,100};
        String s5 = new String(bytes); //可以将byte字节转为ascii码
        System.out.println(s5);

字符串的比较:

  当new创建字符串时,指向堆中内存地址,直接赋值时指向StringTable中地址

  ==在比较基本数据类型时,比的是内存中的数据值,但在比较引用数据类型时,比较为地址值

  所以这两种字符串不能直接比较,结果一定是false

  需要比较字符串时,要调用.equals();

  键盘录入得到的字符串是new产生的,所以不能直接==比较

        if(s4 == s5) {//                   比较地址值
            System.out.println(true);
        }else{
            System.out.println(false);
        };
        boolean ans = s4.equals(s5);//     比较的内容
        System.out.println(ans);
        // 比较内容是否相等(不考虑大小写)
        String s6 = "ABCD";
        ans = s4.equalsIgnoreCase(s6);
        System.out.println(ans);

案例:用户登录

//------------------------------------------案例一、用户登录--------------------------------------------
/*        需求:已知正确的用户名和密码,请用程序实现模拟用户登录。
                总共给三次机会,登录之后,给出相应提示*/


        //定义两个变量,记录正确的用户名和密码
        String rightUsername = "zhangsan";
        String rightPassword = "123456";

        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < 3;i++) {
            //键盘输入账号密码
            System.out.println("请输入用户名:");
            String username = sc.next();
            System.out.println("请输入密码:");
            String password = sc.next();

            //比较用户名和密码
            if (isRight(rightUsername,rightPassword,username,password)){
                System.out.println("登录成功!");
                break;
            }else{
                System.out.println("用户名或密码错误!");
                if (i == 2){
                    System.out.println("您已尝试错误三次,登录失败!");
                    break;
                }else{
                    System.out.printf("您还可以尝试%d次!",(2 - i));
                }
            }
        }

字符串的遍历:

        //遍历字符串:
        System.out.println("请输入需要遍历的字符串");
        String s7 = sc.next();
        for (int i1 = 0; i1 < s7.length(); i1++) {
            System.out.println(s7.charAt(i1));
        }

字符串的拼接:

        //拼接字符串:
        int[] arr = {1,2,3,4,5,6,7,8,9};
        System.out.println(printArrDef(arr));
        System.out.println(printArrDef2(arr));
        System.out.println(printArrDef3(arr));

字符串的翻转:

        //翻转字符串:
        System.out.println(filpString("Abcfge"));

字符串的截取:

        //*截取字符串:
        System.out.println("ABCDEFGHIJKLMN".substring(2,7));//"CDEFG",包左不包右,不包含起始位置

字符串内替换:

        //字符串内替换:
        System.out.println("不会打可以别打,TMD,又菜又爱玩,TMD".replace("TMD","***"));

2.StringBuilder

  StringBuilder可以看做是一个容器,创建之后里面的内容是可以修改的

  可以用来提高字符串的操作效率以及减小内存占用

  可以空参构造也可以用字符串参数构造

方法:

方法名作用
append(任意类型数据)添加数据,返回容器本身
reverse()翻转容器中的内容
length()返回长度,也就是字符个数
toString()可以将容器转为String类型返回

3.StringJoiner

  构造函数:

    1.StringJoiner(间隔符)

    2.StringJoiner(间隔符,开始符号,结束符号)

总结:

1.String

  表示字符串类,定义了很多操作字符串的方法

2.StringBuilder

  一个可变的操作字符串的容器。

  可以高效的拼接字符串,还可以将容器里面的内容反转。

3.StringJoiner

  JDK8出现的一个可变的操作字符串的容器,可以高效,方便的拼接字符串。

  在拼接的时候,可以指定间隔符号,开始符号,结束符号。

案例:

    public static String printArrDef(int[] arr){//      使用普通方法,处理大量字符串时,过度占用内存
        //拼接字符串:
        //要求:定义一个int数组[1,2,3],要求方法执行后输出为"[1,2,3]"

        if(arr == null){
            return "";
        }else if(arr.length == 0){
            return "[]";
        }else{
            String result = "[";
            for (int i = 0; i < arr.length; i++) {
                result = result + arr[i];
                if (i != arr.length - 1){
                    result += ",";
                }
            }
            result += "]";
            return  result;
        }
    }
    public static String printArrDef2(int[] arr){//     使用StringBuilder,减小内存占用同时加快处理速度
        StringBuilder sb = new StringBuilder();
        if(arr == null){
            return "";
        }else if(arr.length == 0){
            return "[]";
        }else{
            sb.append("[");
            for (int i = 0; i < arr.length; i++) {
                sb.append(arr[i]);
                if (i != arr.length - 1){
                    sb.append(",");
                }
            }
            sb.append("]");
            return  sb.toString();
        }
    }
    public static String printArrDef3(int[] arr){//      使用Stringjoiner,进一步优化代码
        StringJoiner sj = new StringJoiner(",","[","]");
        if(arr == null){
            return "";
        }else if(arr.length == 0){
            return "[]";
        }else{
            for (int i = 0; i < arr.length; i++) {
                sj.add(arr[i] + "");
            }
            return  sj.toString();
        }
    }



    public static String filpString(String str){
        String result = "";
        for (int i = str.length() - 1; i >= 0; i--) {
            result = result + str.charAt(i);
        }
        return result;
    }