认识String类

1、JDK中源码
在这里插入图片描述
①被String类被final修饰的意义:String类无法被继承,保证所有使用JDK的人都使用的都是同一个String类


2、创建字符串的方式
【常用①④】
①直接赋值:String str =“Hello Word”;
②通过构造方法产生对象 String str =new String(“hello word”);
③通过字符数组产生对象
char[] data =new char[]{‘a’};
④通过String的静态方法valueOf(任意数据类型)—>转为字符串
String str =String.valueOf();

public class StringTest {
    public static void main(String[] args) {
        //直接赋值
        String str1 = "hello word";
        //通过构造方法
        String str2 =new String("hello word");
        //通过字符数组
        char[] data =new char[]{'a','b','c'};
        String str3 =new String(data);
        //通过静态方法
        String str4 =String.valueOf(10);
        System.out.println(str1+"\n"+str2+"\n"+str3+"\n"+str4);
    }
}
//输出结果
//hello word
//hello word
//abc
//10

3、字面量: 直接写出来的数值称为字面量
在这里插入图片描述


4、字符串比较:
1、使用 equals() 方法–>大小写有区别
2、使用 equalsIgnoreCase() -->大小写无区别
【当需要由用户输入时,避免空指针异常】
在这里插入图片描述

5、字符串常量池:
1、当使用直接赋值法产生字符串对象时,JVM会维护一个字符串的常量池,若该对象在堆中不存在时,则产生一个新的字符串对象加入字符串的常量池中。
2、当继续使用直接赋值法产生字符串对象时,JVM发现该引用指向的内存在常量池已经存在时,不再创建新的字符串对象,而是复用已有对象。


6、手工入池、intern方法:
调用intern方法会将当前字符串引用指向的对象保存到字符串常量池中。
1、若当前常量池中已经存在了该类对象,则不再产生新的对象,返回常量池中的String对象地址
2、若当前常量池中不存在该对象,则将该对象入池,返回入池后的地址,
7、字符串不可变性:
所谓的字符串不可变性,指的是字符串对象的内容不能变,而不是字符串引用不能变
在这里插入图片描述
Q:为何字符串对象无法修改内容?
字符串其实就是一个字符数字 char[],字符串保存的值在数组中保存,private修饰且不提同gettter和setter方法,无法修改。
在这里插入图片描述
Q:如何修改字符串内容?
1、在运行时通过反射破坏value数组的封装(不推荐)

public class StringTest {
    public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
    //在运行时通过反射破坏value数组的封装
        String str="hello";
        Class<String>cls =String.class;
        //获取这个属性
        Field field =cls.getDeclaredField("value");
        //破坏封装,破坏private
        field.setAccessible(true);
        //在String类的外部通过反射拿到value数组
        char[] value =(char[]) field.get(str);
        value[0] ='H';
        System.out.println(str);
    }
}
//输出结果
//Hello

2、更换使用StringBuilder或者StringBuffer类(此时已经不是一个类型了)
①若需要频繁进行字符串的 拼接 ,使用StringBuild类的append方法
【StringBuffer和StringBuilder使用方法一样,但它是线程安全,性能较差】

 public static void main(String[] args) {
 		//若需要频繁进行字符串的拼接,使用StringBuild类的append方法
        StringBuilder str =new StringBuilder();
        str.append("h");
        str.append("e");
        str.append("l");
        str.append("l");
        str.append("o");
        System.out.println(str);
    }
 //输出
 //hello

StringBuilder转换为String类:
调用toString()方法
在这里插入图片描述

String转为StringBuilder:
1、使用StringBuilder构造方法
在这里插入图片描述

2、append方法
在这里插入图片描述


StringBuilder常用方法:
1、字符串翻转:reverse()方法
2、删除指定范围的数组:delete(int start,int end)方法,范围是左闭右开。
3、插入:insert(int start,各种数据类型)方法,从start位置开始插入任意数据类型
在这里插入图片描述


字符串常用方法

1、字符串的比较

①equals():
区分大小写
②equalsIgnoreCase():
不区分大小写
③compareTo():
比较两个字符串大小,根据字符串内部每个数组进行ASSCII的比较(按照字典序排列)

2、字符和字符串的相互转换

1、字符----->字符串
①通过构造方法

char[] arr ={'a','b','c'};
        String arr1 =new String(arr);
        System.out.println(arr1);

在这里插入图片描述
2、字符串----->字符
①charAt(int index): 取出字符串指定索引的字符
在这里插入图片描述
②toCharArray: 将字符串中的内容转为字符数组
在这里插入图片描述

//判断一个字符串是否为纯数字
public class StringPractice {
    public static void main(String[] args) {
        String str1 = "123";
        String str2 = "123a";
        System.out.println(isNumber(str1));
        System.out.println(isNumber(str2));
    }

    /**
     * 判断一个字符串是否为纯数字
     */
    public static boolean isNumber(String str) {
        char[] str1 = str.toCharArray();
        for (int i : str1) {
            if (i > '9' || i < '0') {
                return false;
            }
        }
        return true;
    }
}
//输出结果
//true
//true

3、字符串和字节相互转换

①、字符串----->字节
getBytes()
在这里插入图片描述

②、字节----->字字符串
通过构造方法
在这里插入图片描述
4、字符串的查找

在这里插入图片描述
5、字符串的替换

replaceAll() 替换所有
replaceFirst() 替换首个
在这里插入图片描述
6、字符串的拆分

split()
【注】某些拆分规则为特殊字符,需要转义
在这里插入图片描述
7、字符串的截取

substring(int beginIndex) 从指定索引截取到结尾
substring(int beginIndex,int endIndex) 截取部分内容
【注】左闭右开
在这里插入图片描述
8、其他常用方法

在这里插入图片描述

//将一个字符串首字母大写 
    public static String firstUpper(String str) {
        //判空
        if (str==null||str.isEmpty()){
            return null;
        }
        //边界
        if (str.length()==1){
            return str.toUpperCase();
        }
        return str.substring(0,1).toUpperCase()+str.substring(1);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值