认识String类

认识String类,第1张

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);
    }

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/890047.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-14
下一篇 2022-05-14

发表评论

登录后才能评论

评论列表(0条)

保存