【Java 字符串类】

78 篇文章 0 订阅

String

package com.yuzhenc.common;

import java.util.Arrays;

/**
 * @author: yuzhenc
 * @date: 2022-02-27 20:38:40
 * @desc: com.yuzhenc.common
 * @version: 1.0
 */
public class Test10 {
    public static void main(String[] args) {
        //创建字符串对象
        String str = "abcdefgh";//在常量池中
        //构造器创建字符串,在堆中
        String str1 = new String();
        String str2 = new String("abcdefgh");
        String str3 = new String(new char[]{'a','b','c','d','e','f','g','h'});
        String str4 = "abcdefgh";

        //new出来的东西在堆中,字符串直接赋值的在字符串常量池中
        System.out.println(str == str4);//true
        System.out.println(str == str2);//false
        System.out.println(str == str3);//false
        System.out.println(str2 == str3);//false

        //存在变量的字符串拼接
        String str5 = "a"+"b";//编译时会优化成 String str5 = "ab";
        String str6 = str1 + str2;//存在变量时,编译时不会进行优化,因为编译器不知道变量是指代啥

        //字符串截取
        System.out.println(str.substring(3));//defgh
        System.out.println(str.substring(3,6));//def
        //字符串的合并,拼接操作
        System.out.println(str.concat("123456"));//abcdefgh123456
        //字符替换
        System.out.println(str.replace('a','z'));//zbcdefgh
        //指定分隔符分成字符串数组
        System.out.println(Arrays.toString("hello sqlboy".split(" ")));//[hello, sqlboy]
        //大小写转化
        System.out.println(str.toUpperCase());//ABCDEFGH
        System.out.println(str.toUpperCase().toLowerCase());//abcdefgh
        //去除首位空格
        System.out.println("  a   b   c".trim());//a   b   c
        //转化为String类型
        System.out.println(String.valueOf(false));//false
        //toString()方法
        System.out.println(str.toString());//abcdefgh
        //equals()方法
        System.out.println("abcdefgh".equals(str));//true
        //compareTo()方法
        /*
            a.compareTo(b)
            1.若字符串长度不相等,并且a与b是包含关系,则返回字符串长度差length(a)-length(b)
            2.若字符串长度不相等,并且a与b不是包含关系,则返回第一次出现不同字符的ascii码的差值
            3.若字符串长度相等,并且a与b值不相同,则返回第一次出现不同字符的ascii码的差值
            4.若字符串值相同,则返回0
        */
        System.out.println("abcdefgh".compareTo(str));//0
        System.out.println("abcde".compareTo("abcdefg"));//-2
        System.out.println("abcd".compareTo("ABCD"));//32
        System.out.println("abcd".compareTo("bcde"));//-1
    }
}

StringBuilder

  • 不可变字符串:String
  • 可变字符串:StringBuilder StringBuffer
  • 在不改变地址的情况下,可以修改字符串,这样的字符串称为可变字符串,否则,该字符串为不可变字符串
package com.yuzhenc.common;

/**
 * @author: yuzhenc
 * @date: 2022-02-27 21:27:29
 * @desc: com.yuzhenc.common
 * @version: 1.0
 */
public class Test11 {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder("hello sqlboy");
        //增
        sb.append(" welcome to java");//在后面追加字符串
        System.out.println(sb);//hello sqlboy welcome to java
        //删
        sb.delete(3,6);//删除位置[3,6)上的字符
        System.out.println(sb);//helsqlboy welcome to java

        sb.deleteCharAt(24);//删除2位置24上的字符
        System.out.println(sb);//helsqlboy welcome to jav

        //改,插入
        sb.insert(24,'a');
        System.out.println(sb);//helsqlboy welcome to jav
        //改,替换
        sb.replace(3,9,"lo");//在位置[3,9)替换成字符串lo
        System.out.println(sb);//hello welcome to java
        sb.setCharAt(15,'0');//将指定位置的字符设置为目标字符
        System.out.println(sb);//hello welcome t0 java
        //查
        for (int i = 0; i < sb.length(); i++) {
            System.out.print(sb.charAt(i)+"\t");
        }
        System.out.println();
        //截取
        //截取[0,5)位置的字符
        System.out.println(sb.substring(0,5));//hello
    }
}

StringBuffer

package com.yuzhenc.common;

/**
 * @author: yuzhenc
 * @date: 2022-02-27 22:16:58
 * @desc: com.yuzhenc.common
 * @version: 1.0
 */
public class Test12 {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer("hello sqlboy");
        //增
        sb.append(" welcome to java");//在后面追加字符串
        System.out.println(sb);//hello sqlboy welcome to java
        //删
        sb.delete(3,6);//删除位置[3,6)上的字符
        System.out.println(sb);//helsqlboy welcome to java

        sb.deleteCharAt(24);//删除2位置24上的字符
        System.out.println(sb);//helsqlboy welcome to jav

        //改,插入
        sb.insert(24,'a');
        System.out.println(sb);//helsqlboy welcome to jav
        //改,替换
        sb.replace(3,9,"lo");//在位置[3,9)替换成字符串lo
        System.out.println(sb);//hello welcome to java
        sb.setCharAt(15,'0');//将指定位置的字符设置为目标字符
        System.out.println(sb);//hello welcome t0 java
        //查
        for (int i = 0; i < sb.length(); i++) {
            System.out.print(sb.charAt(i)+"\t");
        }
        System.out.println();
        //截取
        //截取[0,5)位置的字符
        System.out.println(sb.substring(0,5));//hello
    }
}

String、StringBuilder和StringBuffer区别

  1. String类是不可变类,即一旦一个String对象被创建后,包含在这个对象中的字符序列是不可改变的,直至这个对象销毁;
  2. StringBuffer类则代表一个字符序列可变的字符串,可以通过append、insert、reverse、setChartAt、setLength等方法改变其内容。一旦生成了最终的字符串,调用toString方法将其转变为String;
  3. JDK1.5新增了一个StringBuilder类,与StringBuffer相似,构造方法和方法基本相同。不同是StringBuffer是线程安全的,而StringBuilder是线程不安全的,所以性能略高。通常情况下,创建一个内容可变的字符串,应该优先考虑使用StringBuilder;
  4. StringBuilder:JDK1.5开始,效率高,线程不安全;
  5. StringBuffer:JDK1.0开始,效率低,线程安全。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

sqlboy-yuzhenc

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

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

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

打赏作者

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

抵扣说明:

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

余额充值