java StringBuilder对比String的优点和15个经典案例

这篇具有很好参考价值的文章主要介绍了java StringBuilder对比String的优点和15个经典案例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


Java中的 StringBuilder类和 String类在处理字符串时有显著的区别,主要体现在可变性、性能以及线程安全性等方面:

区别:

  1. 可变性:

    • String:是不可变的。每次对String对象进行拼接、替换等操作时,都会创建一个新的String对象,原始对象保持不变。
    • StringBuilder:是可变的。它提供了append()、insert()、delete()等方法,可以直接修改对象内部的字符数组,不需要每次都创建新的对象。
  2. 性能:

    • String:由于其不可变性,在大量字符串操作(尤其是连接)时,会产生较多临时对象,消耗内存且影响性能。
    • StringBuilder:对于频繁的字符串修改操作,性能更优,因为它重用已分配的内存空间,减少垃圾回收压力。
  3. 线程安全:

    • String:本身的操作不是线程安全的,但由于不可变性,一旦创建后,多个线程读取不会产生问题。
    • StringBuilder:在单线程环境下效率更高,因为没有同步开销;而在多线程环境下,如果需要并发修改,应该使用StringBuffer,它是线程安全版本的StringBuilder

使用StringBuilder的优点案例:

以下是一些使用StringBuilder的优势场景及其示例代码:

1. 字符串拼接

StringBuilder sb = new StringBuilder();
for (int i = 0; i < 10000; i++) {
    sb.append("Value: ").append(i).append("\n");
}
String result = sb.toString(); // 最终结果是一个包含大量拼接内容的字符串

在循环中多次拼接字符串时,使用StringBuilder可以避免大量的中间String对象生成。

2. 构建动态查询语句

StringBuilder sql = new StringBuilder("SELECT * FROM Users WHERE ");
if (!name.isEmpty()) {
    sql.append("Name='").append(name).append("' AND ");
}
if (!age <= 0) {
    sql.append("Age=").append(age);
}
String query = sql.toString().trim();

根据条件动态构造SQL查询语句时,使用StringBuilder可以灵活添加或删除条件。

3. 格式化输出

StringBuilder logMessage = new StringBuilder();
logMessage.append("Timestamp: ")
          .append(new Date())
          .append(", Event: ")
          .append(eventDescription)
          .append(", Details: ")
          .append(details);
System.out.println(logMessage.toString());

构建日志消息时,通过StringBuilder逐个添加各个部分,然后一次性打印。

4. 字符串反转

StringBuilder strBuilder = new StringBuilder("Hello World");
strBuilder.reverse();
String reversedStr = strBuilder.toString(); // "dlroW olleH"

使用StringBuilder的reverse()方法可以高效地实现字符串反转。

5. 插入字符串

StringBuilder sb = new StringBuilder("This is a test.");
int index = 7;
sb.insert(index, "long "); // 插入"long "
String modifiedStr = sb.toString(); // "This is long a test."

可以在指定位置插入字符串,无需创建新对象。

6. 删除子串

StringBuilder sb = new StringBuilder("Hello, this is a test.");
sb.delete(7, 14); // 删除从索引7到13的子串
String trimmedStr = sb.toString(); // "Hello, test."

当然,以下是更多的StringBuilder使用优点案例:

7. 字符串替换

StringBuilder sb = new StringBuilder("Hello, world!");
sb.replace(7, 12, "Java"); // 将"world"替换为"Java"
String replacedStr = sb.toString(); // "Hello, Java!"

使用replace()方法可以高效地在原字符串基础上进行替换操作。

8. 构建复杂JSON或XML结构

StringBuilder jsonBuilder = new StringBuilder();
jsonBuilder.append("{");
jsonBuilder.append("\"name\": \"John\", ");
jsonBuilder.append("\"age\": ").append(30).append(", ");
jsonBuilder.append("\"city\": \"New York\"");
jsonBuilder.append("}");
String jsonString = jsonBuilder.toString(); // "{"name": "John", "age": 30, "city": "New York"}"

在构造复杂的JSON或XML文本时,利用StringBuilder逐个添加属性和值,避免频繁创建新对象。

9. 处理用户输入的大量数据

Scanner scanner = new Scanner(System.in);
StringBuilder inputBuffer = new StringBuilder();

while (scanner.hasNextLine()) {
    inputBuffer.append(scanner.nextLine()).append("\n");
}
String userInput = inputBuffer.toString().trim();

当需要收集用户输入的大量文本时,使用StringBuilder能有效减少内存消耗和提高处理速度。

10. 动态生成HTML页面

```java
StringBuilder htmlBuilder = new StringBuilder("<html><body>");
for (String item : itemList) {
    htmlBuilder.append("<div>").append(item).append("</div>");
}
htmlBuilder.append("</body></html>");
String htmlPage = htmlBuilder.toString();
```
在动态生成HTML或其他标记语言时,通过`StringBuilder`逐行添加元素内容,形成完整的页面。

继续列举StringBuilder在实际场景中的优点案例:

11. 处理字符串格式转换

```java
StringBuilder hexBuilder = new StringBuilder();
for (byte b : byteArray) {
    hexBuilder.append(String.format("%02X ", b));
}
String hexString = hexBuilder.toString().trim(); // 用于将字节数组转换为十六进制字符串
```
当需要将数值或其他类型的数据转换成特定格式的字符串时,利用`StringBuilder`可以高效地完成这一过程。

12. 实现字符串缓冲区

```java
StringBuilder buffer = new StringBuilder();

public void addMessage(String message) {
    buffer.append(message).append("\n");
}

public String getBufferContent() {
    return buffer.toString();
}
```
在某些需要维护一个可变字符串缓冲区的场景中(例如记录日志或消息队列),`StringBuilder`可以作为一个高效的字符串存储容器。

13. 拼接大量字符串数组元素

```java
String[] words = {"Hello", "World", "Java"};
StringBuilder sentence = new StringBuilder();
for (String word : words) {
    sentence.append(word).append(" ");
}
sentence.deleteCharAt(sentence.length() - 1); // 删除末尾多余的空格
String result = sentence.toString(); // "Hello World Java"
```
当需要将多个字符串数组元素连接成一个连续的句子时,使用`StringBuilder`避免了多次创建和复制字符串对象。

14. 计算字符串长度限制内的文本

```java
int maxLength = 100;
StringBuilder textBuilder = new StringBuilder();
while (/* reading text from a file or stream */) {
    String line = readLine();
    if (textBuilder.length() + line.length() <= maxLength) {
        textBuilder.append(line);
    } else {
        break; // 已达到最大长度限制
    }
}
String limitedText = textBuilder.toString();
```
在需要限制输出文本长度的场景中,通过实时计算`StringBuilder`长度来决定是否添加更多内容。

15. 动态生成SQL IN子句

```java
List<Integer> ids = Arrays.asList(1, 2, 3, 4, 5);
StringBuilder inClause = new StringBuilder("(");
for (int i = 0; i < ids.size(); i++) {
    inClause.append(ids.get(i));
    if (i != ids.size() - 1) {
        inClause.append(", ");
    }
}
inClause.append(")");
String sql = "SELECT * FROM Users WHERE id IN " + inClause.toString();
```
在构造包含多个值的SQL IN子句时,`StringBuilder`能灵活、高效地添加各项值。

以上这些例子进一步展示了StringBuilder类在各种不同场景下的应用优势。总之,在涉及频繁修改、拼接字符串的操作中,选择StringBuilder能够显著提高程序性能并降低内存消耗。

python学习汇总连接:
50个开发必备的Python经典脚本(1-10)

50个开发必备的Python经典脚本(11-20)

50个开发必备的Python经典脚本(21-30)

50个开发必备的Python经典脚本(31-40)

50个开发必备的Python经典脚本(41-50)
————————————————

​最后我们放松一下眼睛
java StringBuilder对比String的优点和15个经典案例,java,开发语言文章来源地址https://www.toymoban.com/news/detail-785537.html

到了这里,关于java StringBuilder对比String的优点和15个经典案例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【java】关于String、StringBuffer和StringBuilder的那些事

      目录 一、String 1、构造方法 2、字符串的不可变性 3、字符串的比较 4、 String的常用方法: 二、StringBuider和StringBuffer 1、字符串的拼接 2、StringBuider与StringBuffer 总结     String类提供的构造方式非常多,常用的就以下两种:   注意: 1、String 是引用类型,内部并不存储字符串

    2024年04月10日
    浏览(62)
  • Java字符串知多少:String、StringBuffer、StringBuilder

    String 是 Java 中使用得最频繁的一个类了,不管是作为开发者的业务使用,还是一些系统级别的字符使用, String 都发挥着重要的作用。 String 是 不可变 的、 final 的,不能被继承,且 Java 在运行时也保存了一个字符串池(String pool) ,就使得 String 变得很特殊。 实现三个接口:

    2024年02月06日
    浏览(53)
  • 【JAVA】String ,StringBuffer 和 StringBuilder 三者有何联系?

    个人主页:【😊个人主页】 系列专栏:【❤️初识JAVA】 在之前的文章中我们介绍了JAVA中String的运用方法,事实上在JAVA字符串操作中仅仅只知道String方法是远远不够的,今天我们要介绍的 StringBuffer 和 StringBuilder 在字符串操作中同样占据总要地位。 和 String 类不同的是,S

    2024年02月14日
    浏览(53)
  • java中的String使用注意事项、StringBuilder、StringBuffer、StringJoiner

    String使用注意事项 这里第二次创造了0个对象是因为字符串常量池中已经有\\\"abc\\\" StringBuilder 注意StringBuilder支持链式编程 StringBuilder 线程安全与不安全的区别在于,当系统里存在很多人同时操作同一个StringBuilder就可能出bug,而StringBuilder不会。 StringJoiner

    2024年02月12日
    浏览(35)
  • 【后端面经-Java】String与StringBuffer与StringBuilder的比较

    目录 1. String 2. StringBuffer 3. StringBuilder 4. 性能提升 5. 总结和比较 面试模拟 参考资料 不可变 查看 String 源码如下:由源码可知,String中存储数据的数组被 final 修饰,因此是不可变的 运算和操作 创建对象 创建对象有两种方式:两种方式都会在栈中创建一个字符串变量

    2024年02月16日
    浏览(45)
  • Java-String、StringBuffer、StringBuilder区别及相关面试题

    在Java编程中,经常会遇到处理字符串的需求。Java提供了多个类来处理字符串,其中最常用的是String、StringBuffer和StringBuilder类。本文将介绍这三个类的基本用法和区别。 String是Java中最常用的字符串类,它是不可变的,也就是说一旦被创建,它的值就不能被改变。下面是Stri

    2024年02月11日
    浏览(41)
  • Java基础09 —— 字符序列--String、StringBuilder、StringBuffer区别及其方法介绍

    字符与字符串 字符类型(char)是Java中的基本数据类型,占2个字节16位,默认值是 ‘u0000’ 。字符是用单引号引住的单个符号. 字符串(String)是用双引号引住的任意个字符,是引用数据类型,默认值是null 。字符串其实就是字符组成的序列 字符串声明 举例: 字符序列 多个字符

    2024年02月09日
    浏览(38)
  • 36、Java 中的 String、StringBuilder、StringBuffer、字符串常量池和 intern 方法

    ✏️ Java 中用 java.lang.String 类代表字符串 ✏️ 底层用 char[] 存储字符数据。从 Java9 开始,底层使用 byte[] 存储字符数据 🌿 字符串的底层是 char[] ,但是 char 数组和字符串不能等价。 char 数组是 char 数组,字符串是字符串。 🌿 C 语言中是可以把 char 数组 和字符串等价的 ✏️

    2023年04月08日
    浏览(67)
  • Java中String类型的创建关系、什么是常量池、以及StringBuilder/Buffer等

    这段 Java 代码中,字符串 s1 和 s2 都使用字面量的方式赋值,它们在编译时会被放入常量池中。由于字符串常量池的特性,s1 和 s2 在常量池中的引用地址是相同的,因此 s1 == s2 的结果为 true。 而字符串 s3 和 s4 是通过 new 创建的,它们在内存中是两个不同的对象,因此

    2023年04月08日
    浏览(42)
  • 多线程四大经典案例

    本节内容很重要, 希 望 大 家 可 以 好 好 看 看 , 一 起 加 油~ 1.单线模式 1.1饿汉模式 1.2懒汉模式 2.阻塞式队列 2.1阻塞队列是什么 2.2生产者消费者模型 2.3标准库中的阻塞队列 2.4阻塞队列的实现 3.定时器 3.1定时器是什么 3.2标准库中的定时器 3.3实现定时器 4.线程池 4.1什么

    2023年04月27日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包