对于String的用法详解

目录

一、String的基本用法

二、对于字符串常量池的理解。

三、String类的常见操作。

四、StringBuffer和StringBuilder的使用。


一、String的基本用法

1.1String的创建方法

//第一种创建方法
String str="Hellow";
System.out.println(str);

//第二种创建方法
String str02=new String("Hellow");
System.out.println(str02);

//第三种创建方法
char[] chars={'q','w','e','c'};
String str03=new String(chars);
System.out.println(str03);

 注意:String是引用类型,指向堆中的地址。

String str="Hellow";
String str02=str;
str="hellow";
System.out.println(str);
System.out.println(str02);

 此时可以看出str的改变不会让str02改变。

1.2字符串中间的比较。

正常情况下:

String str="Hellow";
String str02="Hellow";
System.out.println(str==str02);//true
String str="Hellow";
String str02="Hellow";
System.out.println(str.equals(str02));//true
String str="Hellow";
String str02="hellow";
System.out.println(str==str02);//false
String str="Hellow";
String str02="hellow";
System.out.println(str.equals(str02));//false

注意: 

String str="Hellow";
String str02=new String("Hellow");
System.out.println(str.equals(str02));//true
System.out.println(str==str02);//false

 我们会发现str==str02为false,这是为什么呢?

接下来我们就会引用字符串常量池的概念。

二、对于字符串常量池的理解。

2.1什么是字符串常量池

就拿String str="Hellow"来说

而 String str02=new String("Hellow")是以这种方式存储

我们找到==比较的是String引用的地址,new一个对象时,会在堆中创建一个对象使它指向字符串常量池中的对象。

String类型定义的字符串都在字符串常量池。 

 2.2intern的用法

String str="Hellow";
String str02=new String("Hellow");
System.out.println(str.equals(str02));//true
System.out.println(str==str02);//false

 想要使他们相等我们就要使用intern方法进行入池操作

String str="Hellow";
String str02=new String("Hellow").intern();
System.out.println(str.equals(str02));//true
System.out.println(str==str02);//true

2.3字符串的不可变性

String str = "hello" ; 
str = str + " world" ; 
str += "!!!" ; 
System.out.println(str); 
// 执行结果
hello world!!!

 这个代码看似是在str上进行操作,其实是创建了很多个对象,最后引用最后的对象,字符串在正常情况下不能被改变。

三、String类的常见操作。

3.1字符与字符串之间的转换

3.1.1字符------->字符串

    public static void main(String[] args) {
        char[] chars={'a','b','c','d','e'};
        //直接转换
        String str=new String(chars);
        //从第1个到第3个
        String str01=new String(chars,1,3);
        System.out.println(str);
        System.out.println(str01);
    }

3.1.2字符串------->字符

    public static void main(String[] args) {
        String str="abcdefg";
        //1、对于单个类容的截取
        char ch=str.charAt(1);
        System.out.println(ch);
        //2、转换成char[]类型的数组
        char[] chars=str.toCharArray();
        for (char c:chars) {
            System.out.println(c);
        }
    }

 3.2字节与字符串的转换

3.2.1字节------->字符串

    public static void main(String[] args) {
        byte[] bytes={'1','2','3'};
        //1、直接转换
        String str=new String(bytes);
        System.out.println(str);

        //2、部分转换
        String str2=new String(bytes,1,2);
        System.out.println(str2);
    }

3.2.2字符串------->字符

    public static void main(String[] args) throws UnsupportedEncodingException {
        String str="小杨";
        //1.直接转换
        byte[] bytes=str.getBytes();
        for (byte b:bytes) {
            System.out.println(b);
        }
        //2、转码转换处理
        byte[] bytes1=str.getBytes("utf-8");//可以转换成别的字符串
        for(byte e:bytes1){
            System.out.println(e);
        }
    }

 对于这种异常我们直接抛出就行了。

注意:char[] 更适合对于文本的处理(文本数据)

           byte[] 更适合网络传输(二进制编码)

3.3对于字符串的比较

    public static void main(String[] args) {
        String str="Hellow";
        String str02="Hellow";
        //区分大小写比较
        System.out.println(str.equals(str02));
        //不分大小写比较
        System.out.println(str.equalsIgnoreCase(str02));
        //相等返回0,小于返回负数,大于返回正数
        System.out.println(str.compareTo(str02));
    }

3.4对于字符串的查找 

    public static void main(String[] args) {
        String str="qwemnbxvcqwe";
        //判断一个子字符串存在
        System.out.println(str.contains("qwe"));//ture
        //查找操作
        System.out.println(str.indexOf("nb"));//4
        System.out.println(str.indexOf("q", 3));//9
        System.out.println(str.lastIndexOf("q"));//9
        System.out.println(str.lastIndexOf("q", 5));//0

        //判断字符串是否以指定位置开头
        System.out.println(str.startsWith("qw"));//ture
        System.out.println(str.startsWith("w", 1));//ture

        //判断是否以指定位置结尾
        System.out.println(str.endsWith("qwe"));//ture
    }

3.5对于字符串的替换 

    public static void main(String[] args) {
        String str="qwesdfsdfqwe";
        //对于字符串的替换
        String str01=str.replace('q','w');
        System.out.println(str01);//wwesdfsdfwwe

        String str02=str.replaceAll("q","z");
        System.out.println(str02);//zwesdfsdfzwe

        String str03=str.replaceFirst("q","z");
        System.out.println(str03);//zwesdfsdfqwe
    }

注意: 对于字符串的替换是创建一个新的字符串,不是更改原来的字符串

3.6对于字符串的拆分

    public static void main(String[] args) {
        String str="hello world hello bit";
        String[] strings=str.split(" ");
        for (String s:strings) {
            System.out.println(s);
        }

        String str01="hello world hello bit";
        String[] strings01=str01.split(" ",2);
        for (String s:strings01) {
            System.out.println(s);
        }
    }

注意: 有些分隔要加上“\”才能使用

3.7对于字符串的截取

    public static void main(String[] args) {
        String str="helloworld";

        System.out.println(str.substring(2));
        //从0开始不包含4下标
        System.out.println(str.substring(0, 4));
    }

四、StringBuffer和StringBuilder的使用。

    public static void main(String[] args) {
        StringBuffer sb=new StringBuffer();
        sb.append("qwe").append("wwedq");
        System.out.println(sb);
    }

StringBuffer和String的区别是StringBuffer可以在原有的基础上进行修改。

我们可以在原有的字符串上进行其他的修改

例如:

    public static void main(String[] args) {
        StringBuffer sb=new StringBuffer();
        //添加
        sb.append("qwe").append("wwedq");
        System.out.println(sb);//qwewwedq
        //反转
        System.out.println(sb.reverse());//qdewwewq
        //删除
        System.out.println(sb.delete(1, 3));//qwwewq
    }

注意:解释String、StringBuffer、StringBuilder的区别

1、String中的内容不可修改、而StringBuffer和StringBuilder中的内容可以修改。

2、StringBuffer和StringBuilder中的内容大致相似。

3、StringBuffer采用同步处理,线程安全操作;而StringBuilder未采用同步处理,线程不安全。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

now just do it

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值