哈喽,各位小伙伴们,你们好呀,我是喵手。
今天我要给大家共享一些自己日常学习到的一些知识点,并以文字的办法跟大家一同交流,互相学习,一个人虽能够走的更快,但一群人能够走的更远。
我是一名后端开发爱好者,工作日常接触到最多的便是Java言语啦,所以我都尽量抽业余时间把自己所学到所会的,经过文章的办法进行输出,希望以这种办法帮助到更多的初学者或许想入门的小伙伴们,一起也能对自己的技术进行沉积,加以复盘,查缺补漏。
小伙伴们在批阅的过程中,假如觉得文章不错,欢迎点赞、保藏、关注哦。三连便是对作者我写作道路上最好的鼓励与支持!
前语
在Java中,字符串是一种不可变的数据类型,也便是说,一旦创立了该字符串,就无法对其进行修正。可是,在实践开发中,我们常常需求对字符串进行拼接,删去和替换等操作。这就需求一个能够动态修正字符串的类。
摘要
StringBuilder类能够了解为一个字符串缓冲区,它供给一个可变的字符序列,能够在该序列上进行修正操作,比方追加,刺进,删去和替换等。与String类不同的是,String类的修正操作每次都会创立一个新的字符串目标,而StringBuilder类的修正操作都是在原有的字符序列上进行的,不会创立新的目标,因此在频频进行字符串操作时,StringBuilder类的效率比String类高。
StringBuilder类
简介
StringBuilder类位于Java.lang包中,是一个可变字符串类,它继承于AbstractStringBuilder类,实现了CharSequence, Appendable, Serializable等接口。StringBuilder的主要作用是用来处理字符串,供给一系列的操作办法,包括追加,刺进,删去和替换等。StringBuilder类适用于构建字符串的场景,能够进步字符串的操作效率。
源代码解析
下面是StringBuilder类的源代码:
public final class StringBuilder extends AbstractStringBuilder
implements java.io.Serializable, CharSequence
{
/**
* 结构一个不带任何字符初始容量为16的StringBuilder
*/
public StringBuilder() {
super(16);
}
/**
* 结构一个带有指定初始容量的StringBuilder
*
* @param capacityBuilder的初始容量
* @throws NegativeArraySizeException 假如capacity为负数
*/
public StringBuilder(int capacity) {
super(capacity);
}
/**
* 结构一个StringBuilder,它包括与指定的CharSequence相同的字符序列
*
* @throws NullPointerException 假如seq为null
*/
public StringBuilder(CharSequence seq) {
this(seq.length() + 16);
append(seq);
}
/**
* 结构一个StringBuilder,它包括与指定的String相同的字符序列
*
* @throws NullPointerException 假如str为null
*/
public StringBuilder(String str) {
this(str.length() + 16);
append(str);
}
}
能够看到,StringBuilder类供给了多个结构办法,能够依据不同的场景挑选不同的结构办法来创立StringBuilder目标。
StringBuilder类是一个可变的字符串,允许进行多次修正而不创立新的String目标。它是AbstractStringBuilder类的子类,实现了CharSequence接口和java.io.Serializable接口。
该类定义了四个结构函数,分别为不带参数的结构函数、指定初始容量的结构函数、包括CharSequence的结构函数和包括String的结构函数。其间,不带参数的结构函数会创立一个长度为16的StringBuilder目标。指定初始容量的结构函数会依据参数capacity创立一个StringBuilder目标。包括CharSequence的结构函数和包括String的结构函数会创立一个容量为参数长度加16的StringBuilder目标,并将参数序列追加到StringBuilder目标结尾。
假如capacity参数为负数,则会抛出NegativeArraySizeException反常。假如seq或str参数为null,则会抛出NullPointerException反常。
如下是部分源码截图:
应用场景事例
以下是一些运用StringBuilder类的场景:
- 字符串拼接
public class StringBuilderTest {
//测验字符串拼接
public static void testAppend() {
StringBuilder sb = new StringBuilder();
sb.append("Hello ");
sb.append("world!");
System.out.println(sb.toString()); //result = "Hello world!"
}
public static void main(String[] args) {
testAppend();
}
}
依据如上测验用例,本地测验成果如下,仅供参考,你们也能够自行修正测验用例或许增加更多的测验数据或测验办法,进行娴熟学习以此加深了解。
- 替换操作
//测验替换操作
public static void testReplace() {
StringBuilder sb = new StringBuilder("The quick brown fox jumps over the lazy dog.");
sb.replace(4, 9, "slow");
System.out.println(sb.toString()); // sb = "The slow brown fox jumps over the lazy dog."
}
public static void main(String[] args) {
testReplace();
}
依据如上测验用例,本地测验成果如下,仅供参考,你们也能够自行修正测验用例或许增加更多的测验数据或测验办法,进行娴熟学习以此加深了解。
- 删去操作
//测验删去操作
public static void testDelete() {
StringBuilder sb = new StringBuilder("The quick brown fox jumps over the lazy dog.");
sb.delete(4, 9);
System.out.println(sb.toString()); // sb = "The brown fox jumps over the lazy dog."
}
public static void main(String[] args) {
testDelete();
}
依据如上测验用例,本地测验成果如下,仅供参考,你们也能够自行修正测验用例或许增加更多的测验数据或测验办法,进行娴熟学习以此加深了解。
如下还有几个操作,我就留给同学们自行测验游玩啦,这儿就不一一赘述啦。
- 刺进操作
StringBuilder sb = new StringBuilder("The brown fox jumps over the lazy dog.");
sb.insert(4, "quick "); // sb = "The quick brown fox jumps over the lazy dog."
- 回转操作
StringBuilder sb = new StringBuilder("hello");
sb.reverse(); // sb = "olleh"
优缺点剖析
长处:
- StringBuilder类是可变的,能够在原有的字符序列上进行修正操作,避免了每次操作都创立新目标的问题。
- StringBuilder类供给了多种操作办法,能够方便地进行字符串拼接,删去,替换等操作。
- StringBuilder类的效率比String类高,特别是在频频进行字符串操作时体现愈加突出。
缺点:
- StringBuilder类不是线程安全的,假如有多个线程一起对同一个StringBuilder目标进行操作,可能会呈现并发问题。
- StringBuilder类无法直接进行比较操作,必须先转换成String类型才干进行比较。
类代码办法介绍
以下是StringBuilder类的常用办法:
-
append()办法:将指定的字符串或字符追加到此序列的结尾。
-
replace()办法:用指定的字符串替换此序列中在指定位置范围内的子字符串。
-
delete()办法:从此序列中删去从 start 开端到 end – 1 完毕的字符。
-
insert()办法:将指定的字符串或字符刺进此序列中。
-
reverse()办法:回来一个新的StringBuilder目标,它是此序列的一个倒序排列。
-
toString()办法:将此序列用字符串表示办法回来。
测验用例
以下是一个测验用例,用于测验StringBuilder类的基本功能:
测验代码演示
package com.example.javase.se.classes;
/**
* @Author ms
* @Date 2023-11-02 18:25
*/
public class StringBuilderDemo {
public static void main(String[] args) {
testAppend();
testReplace();
testDelete();
testInsert();
testReverse();
}
public static void testAppend() {
StringBuilder sb = new StringBuilder();
sb.append("Hello ");
sb.append("world!");
System.out.println(sb.toString());
}
public static void testReplace() {
StringBuilder sb = new StringBuilder("The quick brown fox jumps over the lazy dog.");
sb.replace(4, 9, "slow");
System.out.println(sb.toString());
}
public static void testDelete() {
StringBuilder sb = new StringBuilder("The quick brown fox jumps over the lazy dog.");
sb.delete(4, 9);
System.out.println(sb.toString());
}
public static void testInsert() {
StringBuilder sb = new StringBuilder("The brown fox jumps over the lazy dog.");
sb.insert(4, "quick ");
System.out.println(sb.toString());
}
public static void testReverse() {
StringBuilder sb = new StringBuilder("hello");
sb.reverse();
System.out.println(sb.toString());
}
}
测验成果
依据如上测验用例,本地测验成果如下,仅供参考,你们也能够自行修正测验用例或许增加更多的测验数据或测验办法,进行娴熟学习以此加深了解。
测验代码剖析
依据如上测验用例,在此我给大家进行深化详细的解读一下测验代码,以便于更多的同学能够了解并加深印象。 依据如上内容写一段总结
如上测验用例是一个Java类StringBuilderDemo,包括了5个静态办法,分别是testAppend、testReplace、testDelete、testInsert和testReverse。
testAppend办法经过StringBuilder类的append办法向一个空StringBuilder目标中追加了两个字符串,最终输出StringBuilder中的字符串。
testReplace办法经过StringBuilder类的replace办法替换了一段字符串,从第4个字符(下标从0开端)到第9个字符之间的内容替换为”slow”,最终输出StringBuilder中的字符串。
testDelete办法经过StringBuilder类的delete办法删去了一段字符串,从第4个字符到第9个字符之间的内容被删去,最终输出了StringBuilder中的字符串。
testInsert办法经过StringBuilder类的insert办法向字符串中刺进了一段内容,在第4个字符的方位刺进了”quick “,最终输出StringBuilder中的字符串。
testReverse办法经过StringBuilder类的reverse办法将字符串回转,最终输出StringBuilder中的字符串。
全文小结
StringBuilder类是Java中一个重要的字符串操作类,它供给了多种操作办法,能够方便地进行字符串操作。与String类不同的是,StringBuilder类是可变的,能够在原有的字符序列上进行修正操作,避免了每次操作都创立新目标的问题。可是,StringBuilder类不是线程安全的,假如有多个线程一起对同一个StringBuilder目标进行操作,可能会呈现并发问题。因此,在多线程环境下应该运用StringBuffer类代替StringBuilder类。
总结
在实践开发中,对字符串进行操作是很常见的需求。运用StringBuilder类能够进步字符串的操作效率,避免了频频创立新目标的问题。因此,在需求进行字符串操作的场景中应该优先挑选运用StringBuilder类。一起,也要注意StringBuilder类的线程安全问题,依据详细的场景挑选合适的类来操作字符串。
… …
文末
好啦,以上便是我这期的全部内容,假如有任何疑问,欢迎下方留言哦,我们下期见。
… …
学习不分先后,知识不分多少;事无巨细,当以虚心请教;三人行,必有我师焉!!!
wished for you successed !!!
⭐️若喜欢我,就请关注我叭。
⭐️若对您有用,就请点赞叭。
⭐️若有疑问,就请评论留言告诉我叭。