第五章: String类与StringBuffer类

String类与StringBuffer类

String类的初始化

  • 使用字符串常量直接初始化一个String对象

    String 变量名=字符串;
    初始化字符串常量对象时,既可以将字符串对象的初始值设为空,也可以初始化为一个具体的字符串

String str1 = null; //初始化为空
String str2 = ""; //初始化为空字符串
String str3 = "abc"; //初始化为abc, 其中abc为字符串常量
  • 使用String的构造方法初始化字符串对象

    String 变量名 = new String(“字符串”);
    字符串可以为空或是一个具体的字符串

方法声明功能描述
String()创建一个内容为空的字符串
String(String value)根据指定的字符串内容创建对象
String(char[] value)根据指定的字符数组创建对象
//以下代码为上表中3种方法的使用示例
public class Example01 {

    public static void main(String[] args) {

        String str1 = new String(); //创建一个空的字符串

        String str2 = new String("abc"); //创建一个内容为abc的字符串

        // 创建一个内容为字符数组的字符串
        char[] charArray = new char[] {'a', 'b', 'c'};

        String str3 = new String(charArray);

        //输出结果
        System.out.println("a" + str1 + "b");
        //Tips: Java中,如果+的两边操作数有一个为String类型,那么+就表示字符串连接运算符

        System.out.println(str2);

        System.out.println(str3);
    }
}

String类的常见操作

方法声明功能描述
int indexOf(int ch)返回指定字符在此字符串中第一次出现处的索引
int lastIndexOf(int ch)返回指定字符串在此字符串中最后一次出现的索引
int indexOf(String str)返回指定字符串在此字符串中第一次出现的索引
char charAt(int index)返回字符串中index位置上的字符,其中index的取值范围是0~字符串长度-1
boolean endsWith(String suffix)判断此字符串是否以指定的字符串结尾
int length()返回字符串的长度
boolean equals(Object anObject)将此字符串与指定字符串比较
boolean isEmpty()当且仅当字符串长度为0时返回true
boolean startWith(String prefix)判断此字符串是否以指定字符串开始
boolean contains(CharSequence cs)判断此字符串中是否包含指定的字符序列
String toLowerCase()使用默认语言环境的规则将String中的所有字符都转换为小写
String toUpperCase()使用默认语言环境的规则将String中的所有字符都转换为大写
static String valueOf(int t)返回int参数的字符串表示形式
char[] toCharArray()将此字符串转换为一个字符数组
String replace(CharSequence oldStr, CharSequence newStr)返回一个新的字符串,它是通过用newStr替换此字符串中的所有oldStr得到的
String[] split(Strng regex)根据参数regex(regex是一个正则表达式,用来限定分隔规则)
String substring(int beginIndex)返回一个新字符串,它包含从指定的beginIndex起始角标处开始,直到此字符串末尾的所有字符
String substring(int beginIndex, int endIndex)返回一个新字符串,它包含从指定的beginIndex起始角标处开始,直到索引endIndex-1角标处的所有字符
String trim()返回一个新字符串,它去除了原字符串首尾的空格

Tips: 关于indexOf(int ch)为什么使用int类型作为参数

  • 字符串的基本操作
public class Example02 {

    public static void main(String[] args) {

        String s = "abcabcabcdba"; //初始化字符串

        System.out.println("字符串长度为:" + s.length());

        System.out.println("字符串中第一个字符:" + s.charAt(0));

        System.out.println("字符c第一次出现的位置:" + s.indexOf('c'));

        System.out.println("字符c最后一次出现的位置:" + s.lastIndexOf('c'));

        System.out.println("子字符串第一次出现的位置:" + s.indexOf("ab"));

        System.out.println("子字符串最后一次出现的位置:" + s.lastIndexOf("ab"));
    }
}
  • 字符串的转换操作
public class Example03 {

    public static void main(String[] args) {

        String str = "java";

        char[] charArray = str.toCharArray(); //字符串转换为字符数组

        System.out.print("将字符串转为字符数组的遍历结果:");

        for(int i = 0; i < charArray.length; i++) {

            if(i != charArray.length-1) {
                //如果不是数组的最后一个元素,在元素后面加逗号
                System.out.print(charArray[i] + ",");
            } else {

                //数组最后一个元素后面不加逗号
                System.out.println(charArray[i]);
            }
        }

        System.out.println("将int值转换为String类型之后的结果:" + String.valueOf(12));
        //String.valueOf()将一个int类型整数转换为字符串

        System.out.println("将字符串转换成大写之后的结果:" + str.toUpperCase());
    }
}
  • 字符串的替换和去除空格操作
public class Example03 {

    public static void main(String[] args) {

        String str1 = " https: //www.pronhub.com ";

        System.out.println("去除字符串两端空格后的结果:" +str1.trim());
        // 输出"https: //www.pornhub.com"

        System.out.println("去除字符串中所有空格后的结果:" +str1.replace(" ", ""));
        // 输出"https://www.pronhub.com"
    }
}
  • 字符串的判断操作
public class Example05 {

    public static void main(String[] args) {

        String s1 = "Starter"; //声明一个字符串

        String s2 = "St";

        System.out.println("s1是否以St开头:" + s1.startsWith("St"));

        System.out.println("s1是否以er结尾:" + s1.endsWith("er"));

        System.out.println("s1是否包含ar:" + s1.contains("ar"));

        System.out.println("s1是否为空" + s1.isEmpty());

        System.out.println("s1与s2字符串是否相等" + s1.equals(s2));
        /** "=="和"equals()"的区别
         * equals() 用于比较两个对象的值是否相等
         * == 用于比较两个对象的内存地址是否相等
         **/

    }
}
  • 字符串的截取和分割
public class Example06 {

    public static void main(String[] args) {

        String str = "2022-1-6";

        System.out.println("从第6个字符截取到末尾的结果:" + str.substring(5));

        System.out.println("从第6个字符截取到第7个字符的结果:" + str.substring(5, 7));
        
        System.out.println("分割后的字符串数组中的元素依次为:");

        String[] strArray = str.split("-");

        for(int count = 0; count < strArray.length; count++) {

            if(count != strArray.length-1) {
                
                System.out.print(strArray[count] + ".");

            }else{

                System.out.println(strArray[count]);
            }

        }
    }
}

Tips: String字符串在获取某个字符时会用到字符串的索引,当访问字符串中某个字符时,如果索引不存在,则会发生StringIndexOutOfBoundsException(字符串角标越界异常)

StringBuffer类

Java中,String类是final类型的,使用String定义的字符串是一个常量,一旦建立,其内容和长度是不可改变的.

为了便于对字符串进行修改,JDK中提供了一个StringBuffer类(字符串缓冲区)来操作字符串,StringBuffer类定义的字符串(类似一个字符容器)其内容和长度是可变的.

方法声明功能描述
StringBuffer append(char c)添加字符到StringBuffer对象中的末尾
StrigBuffer insert(int offset, String str)在StringBuffer对象中的offset位置插入字符串str
StringBuffer deleteCharAt(int index)移除StringBuffer对象中指定位置的字符
StringBuffer delete(int start, int end)移除StringBuffer对象中指定范围的字符或字符串
StringBuffer replace(int start, int end, String s)将StringBuffer对象中指定范围的字符或字符串用s进行替换
void setCharAt(int index), char ch修改指定位置index处的字符
String toString()返回StringBuffer缓冲区中的字符串对象
StringBuffer revese()将此StringBuffer对象用其反转形式取代
public class Example08 {

    public static void main(String[] args) {

        System.out.println("1.添加--------------------------");

        add();

        System.out.println("2.修改--------------------------");

        update();

        System.out.println("3.删除--------------------------");

        delete();
    }

    public static void add() {
        
        StringBuffer sb = new StringBuffer(); //定义一个字符串缓冲区

        sb.append("ABC"); //添加字符串

        System.out.println("append添加结果:" + sb);

        sb.insert(3, "DE"); //在指定位置插入字符串

        System.out.println("insert添加结果:" + sb);
    }

    public static void update() {

        StringBuffer sb = new StringBuffer("ABAAA");

        sb.setCharAt(2, 'C'); //修改指定位置字符

        sb.replace(3, 5, "DE"); //替换指定位置字符串

        System.out.println("替换指定位置结果:" + sb);

        System.out.println("字符串翻转结果:" + sb.reverse());
    }

    public static void delete() {

        StringBuffer sb = new StringBuffer("ABCDEFG");

        sb.delete(3, 7);

        System.out.println("删除指定范围字符串结果:" + sb);

        sb.deleteCharAt(2);

        System.out.println("删除指定位置字符串结果:" + sb);

        sb.delete(0, sb.length());

        System.out.println("清空缓冲区结果:" + sb);
    }
}

多加注意:

  1. String类定义的字符串是常量,一旦创建,其内容和长度都无法改变.StringBuffer表示字符容器,其内容和长度都可以随时修改.
  2. String类重写了Object类的equals()方法, StringBuffer类没有重写Object类的equals()方法.String类的equals()方法比较值,StringBuffer类的equals()方法比较内存地址.
  3. String类对象可以用操作符"+"进行连接,而StringBuffer对象之间不能.
  • StringBuilder类

JDK1.5之后提供了一个StringBuilder类,功能与StringBuffer类似.
StringBuilder(异步)没有实现线程安全功能,所以性能略高.StringBuffer(同步)是线程安全的.
同步: 按顺序执行,一步一步来(synchronic)
异步: 接一个任务,直接给后台,接下一个,谁先读取完谁先执行,没有顺序,可能导致上面代码还没出来,下面代码就出来了.
创建一个内容可变的字符串对象时,优先考虑StringBuffer类.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

_BryceLoski21

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

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

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

打赏作者

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

抵扣说明:

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

余额充值