String StringBuilder StringBuffer三者区别和用法

Java中的字符串操作有三种主要的方式:String、StringBuilder和StringBuffer。它们之间的主要区别在于可变性线程安全性

String:

String是不可变的,一旦创建就不能被修改。每次对String进行操作都会创建一个新的String对象,因此在频繁操作字符串时会导致性能问题。
由于不可变性,String是线程安全的,多个线程可以同时访问一个String对象而不会出现竞争条件。

StringBuilder:

StringBuilder是可变的,可以在不创建新的对象的情况下修改其内容。因此,当需要频繁进行字符串操作时,使用StringBuilder可以提高性能。
StringBuilder不是线程安全的,如果多个线程同时访问一个StringBuilder对象并尝试修改它,可能会导致不确定的结果。因此,通常在单线程环境下使用StringBuilder。

StringBuffer:

StringBuffer与StringBuilder类似,也是可变的,允许在原始对象上进行操作而不创建新对象。
与StringBuilder不同的是,StringBuffer是线程安全的。它的方法都是同步的,因此可以安全地在多线程环境下使用。

异同点:

相同点:
StringBuilder和StringBuffer都提供了可变的字符串操作。
它们都有类似的API,可以进行字符串的添加、插入、删除、替换等操作。
不同点:
StringBuilder是非线程安全的,而StringBuffer是线程安全的。
StringBuilder的性能可能比StringBuffer略好,因为不需要同步操作,但只适用于单线程环境。
在多线程环境下,应该使用StringBuffer来确保线程安全,即使性能略有损失。

使用场景:

如果在单线程环境下进行字符串操作,且性能较为关键,应该使用StringBuilder。
如果在多线程环境下进行字符串操作,或者需要线程安全的字符串操作,应该使用StringBuffer。
如果字符串是不需要修改的,或者只需要进行少量的操作,可以使用String。

StringBuilder使用:

append(String str): 将指定的字符串追加到当前StringBuilder对象的末尾。
insert(int offset, String str): 将指定的字符串插入到当前StringBuilder对象的指定位置。
delete(int start, int end): 删除当前StringBuilder对象中指定范围的字符,左闭右开,从开始位置到结束位置的前一个。
deleteCharAt(int index): 删除指定位置的数据
replace(int start, int end, String str): 用指定的字符串替换当前StringBuilder对象中指定范围的字符。
reverse(): 将当前StringBuilder对象中的字符顺序反转。
charAt(int index): 返回当前StringBuilder对象中指定索引位置的字符。
**length():**返回当前StringBuilder对象中字符的长度。
toString():将当前StringBuilder对象转换为一个String对象。

StringBuffer使用:

append(String str): 将指定的字符串追加到当前StringBuffer对象的末尾。
insert(int offset, String str): 将指定的字符串插入到当前StringBuffer对象的指定位置。
delete(int start, int end): 删除当前StringBuffer对象中指定范围的字符,左闭右开,不包括end。
replace(int start, int end, String str): 用指定的字符串替换当前StringBuffer对象中指定范围的字符.从start开始,不包括end用str替换。
reverse(): 将当前StringBuffer对象中的字符顺序反转。
charAt(int index): 返回当前StringBuffer对象中指定索引位置的字符。
length(): 返回当前StringBuffer对象中字符的长度。
substring(int start): 返回当前StringBuffer对象中从指定位置开始到末尾的子字符串。
substring(int start, int end): 返回当前StringBuffer对象中指定范围的子字符串。
capacity(): 返回当前StringBuffer对象的容量。
ensureCapacity(int minimumCapacity): 确保当前StringBuffer对象的容量至少为指定的最小容量。
toString(): 将当前StringBuffer对象转换为一个String对象。
indexOf(String str,int start): 获取指定字符的下标,从start开始查询返回str下标。

String:

字符串连接:使用加号操作符或concat()方法将字符串连接起来。

String greeting = str1 + " " + str2;
String result = str1.concat(" ").concat(str2);

字符串长度:使用length()方法获取字符串的长度。

字符串比较:使用equals()方法比较两个字符串是否相等。
可以使用equalsIgnoreCase()方法进行忽略大小写的比较。

boolean isEqual = str1.equals(str2);
boolean isEqualIgnoreCase = str1.equalsIgnoreCase(str2);

字符串查找:使用indexOf()方法查找字符串中某个子字符串的位置。如果找不到,则返回-1。

int index = greeting.indexOf("World");

字符串截取:使用substring()方法从字符串中截取子串。

String subStr = greeting.substring(6);
String subStr2 = greeting.substring(0, 5); 

字符串替换:使用replace()方法替换字符串中的某个字符或者子串。

String replaced = greeting.replace("World", "Universe");

字符串分割:使用split()方法根据某个分隔符将字符串拆分成字符串数组。

String[] parts = greeting.split(" ");

字符串转换:使用toLowerCase()、toUpperCase()方法将字符串转换为小写或大写。

String lowerCase = greeting.toLowerCase();
String upperCase = greeting.toUpperCase();

字符串格式化:使用format()方法进行字符串格式化。

String formattedString = String.format("Hello, %s!", "World");

字符串比较大小:使用compareTo()方法比较两个字符串的大小关系。

int comparison = str1.compareTo(str2);

判断字符串是否包含某个子串:使用contains()方法判断字符串是否包含某个子串。

boolean contains = greeting.contains("Hello");

  • 33
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值