关于 String 类

存一份代码

import java.io.UnsupportedEncodingException;
import java.util.Arrays;

public class String000 {
    public static void main22(String[] args) {
        System.out.println(isL("Admin"));//一个 new String ,一个在常量池
    }

    public static boolean isL(String str){
        return str.toLowerCase() == "admin";
    }

    public static void main21(String[] args) {
        String str = "abcde";
        String ret = str.concat("ABC");//拼接的结果不入常量池
        System.out.println(ret);
    }

    public static void main20(String[] args) {
        String str = "abcdefGH123";//转大写,数字不转
        String ret = str.toUpperCase();
        System.out.println(ret);

        String ret1 = str.toLowerCase();//转小写,数字不转
        System.out.println(ret1);
    }

    public static void main19(String[] args) {
        String str = "  abd  de  fg  ";
        String ret = str.trim();//去掉左右的空格,中间不去除空格
        System.out.println(ret);
    }

    public static void main18(String[] args) {
        String str = "abcdefg";
        String sub1 = str.substring(2,4);//2号位置提取字串,4号位置截止 [2,4)
        System.out.println(sub1);
    }

    public static void main17(String[] args) {
        /*String str = "2022 01 01";
        String[] strings = str.split(" ");//以空格分割
        for (String s:strings) {
            System.out.println(s);
        }*/

        /*String str1 = "2022.01.01";
        String[] strings1 = str1.split("\\.",2);//.比较特殊需要转义,\也比较特殊,也需要转义
        //limit 限制以指定字符分割,要分几次
        for (String ss:strings1) {
            System.out.println(ss);
        }*/

        String str2 = "abc.de&fg#hi";
        String[] strings2 = str2.split("\\.|&|#");// 使用 | 一次性分割
        for(String sss : strings2){
            System.out.println(sss);
        }
    }

    public static void main16(String[] args) {
        String str = "ababcabcdabcde";
        String str1 = "ababcabcdabcde";
        String str2 = "ababcabcdabcde";
        String str3 = "ababcabcdabcde";

        System.out.println(str.replace('a', 'g'));//a 全替换为 g
        System.out.println(str1.replace("bc", "BC"));// bc 全替换为 BC
        System.out.println(str2.replaceAll("abc", "ABC"));// abc 全替换为 ABC
        System.out.println(str1.replaceFirst("ab", "AA"));// 只替换第一次出现的
    }

    public static void main15(String[] args) {
        String str = "ababcabcd";
        String tmp = "abc";

        System.out.println(str.startsWith("a", 3));//是否以a开头,并且从下标3位置开始判断
        System.out.println(str.endsWith("cd"));//是否以指定字符或字符串结尾
    }

    public static void main14(String[] args) {
        String str = "ababcabcd";
        String tmp = "abc";
        boolean flg = str.contains(tmp);
        System.out.println(flg);

        int index = str.indexOf(tmp);//获取第一次出现指定字符串的第一个位置
        int index1 = str.indexOf(tmp,3);//从第二个位置开始找,下标由0开始
        System.out.println(index1);

        int index3 = str.lastIndexOf(tmp,4);//从后往前数第五个位置开始找
        System.out.println(index3);
    }

    public static void main13(String[] args) {
        String str1 = "ABC";
        String str2 = "abc";
        int ret = str1.compareTo(str2);//只比较前两个,然后比较长度,前两个相同,长度不同就返回长度差
        System.out.println(ret);// A-a = -32
        System.out.println(str1.equalsIgnoreCase(str2));//忽略大小写比较
    }

    public static void main11(String[] args) throws UnsupportedEncodingException {
        byte[] bytes = {97,98,99,100};
        String str = new String(bytes,1,3);
        System.out.println(str);//转换,输出 bcd

        /*String str2 = "abcd";
        byte[] bytes1 = str2.getBytes();//字符串转数组
        System.out.println(Arrays.toString(bytes1));*/

        String str2 = "abcd";
        byte[] bytes1 = str2.getBytes("GBK");//字符串转数组
        System.out.println(Arrays.toString(bytes1));
    }

    public static void main10(String[] args) {
        String str = "165abc";
        System.out.println(isNum(str));
    }

    public static boolean isNum(String s){
        for (int i = 0; i < s.length(); i++) {
            char ch = s.charAt(i);
            boolean flg = Character.isDigit(ch);//确定指定的字符是否是数字
            if(flg == false){
                return false;
            }
            /*if(ch < '0' || ch > '9'){
                return false;
            }*/
        }
        return true;
    }

    public static void main9(String[] args) {
        /*char[] val = {'a','b','c'};
        String str = new String(val);
        System.out.println(str);*/

        /*char[] val1 = {'a','b','c','d','e'};
        String str1 = new String(val1,1,3);//偏移量为1开始,取三个字符 形成字符串
        System.out.println(str1);// 输出 bcd*/

        String str2 = "hello";
        char ch = str2.charAt(1);//获取到1下标的字符
        System.out.println(ch);

        char[] chars = str2.toCharArray();//把str2 指向的字符串对象变成字符数组
        System.out.println(Arrays.toString(chars));
    }

    public static void main8(String[] args) {
        //每次拼接都要产生对象,它本身是不变的
        //字符串的拼接,会被优化为 StringBuilder 对象,每次 append ,然后又 toString,浪费时间
        String str1 = "hello";
        str1 = str1 + " world";
        str1 += "!!!";
        System.out.println(str1);
    }

    public static void main7(String[] args) {
        //assert s != null;

        String str1 = null;//不指向任何对象
        String str2 = "";//指向字符串为空
        System.out.println(str1 == str2);
    }

    public static void main6(String[] args) {
        //数组的整体赋值只有一次机会,就是在定义的时候
        int[] arr = {1,2,3,4,5};
        arr = new int[] {4,5,6,7};//将 arr 指向新的地址
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }

    public static void main5(String[] args) {
        String str1 = new String("1")+new String("1");
        str1.intern();//手动入池
        //顺序不能换,若池内有11 手动入池就会失败
        String str2 = "11";
        System.out.println(str1 == str2);
    }

    public static void main4(String[] args) {
        String str1 = "11";
        String str2 = new String("1")+new String("1");
        System.out.println(str1 == str2);
    }

    public static void main3(String[] args) {
        String str1 = "abc";
        String str2 = "a"+"bc";//两个都是常量,在编译的时候已经确定好是“abc”了
        System.out.println(str1 == str2);

        String str3 = "ab";
        String str4 = str3+"c";//str3 是一个变量,编译的时候不知道是什么
        //str4 不会在常量池里
        System.out.println(str1 == str4);
    }

    public static void main2(String[] args) {
        /*
        class常量池:int a = 10;
        运行时常量池:当程序把编译好的字节码文件加载到 JVM 中后,会生成一个运行时常量池【方法区】,实际上是class文件常量池
        字符串常量池:主要存放字符串常量 ——> 字符串常量池,本质上是一个哈希表
        双引号引起来的字符串常量 从 JDK1.8 开始,放在了堆里面

        池意义:提高效率
        */
        String str1 = "hello";//双引号引起来的放到字符串常量池,
        String str2 = new String("hello");
        System.out.println(str1 == str2);//判断的是地址,地址肯定不相等
        System.out.println(str1.equals(str2));//判断的是内容
    }

    public static void main1(String[] args) {
        String str1 = "abc";//指向"abc"
        String str2 = str1;//指向“abc”
        System.out.println(str2);
        str1 = "ABC";//改为指向"ABC"
        System.out.println(str2);//仍指向“abc”
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值