首页 > 编程语言 >Java中的String、StringBuilder、StringBuffer

Java中的String、StringBuilder、StringBuffer

时间:2024-08-29 22:50:17浏览次数:13  
标签:Java String StringBuilder System 字符串 println World out

        在Java中,StringStringBuilder 和 StringBuffer 是处理字符串的三个常用类,它们各有特点和适用场景。以下是对这三个类的详细解释、常用方法的代码示例以及它们之间的区别和适用场景。

String

String 类表示不可变的字符序列。一旦创建,String 对象的内容不能被改变。

常用方法示例:

public class StringExample {
    public static void main(String[] args) {
        String str = "Hello, World!";

        // length(): 返回字符串的长度
        System.out.println("Length: " + str.length()); // 输出: 13

        // charAt(int index): 返回指定索引处的字符
        System.out.println("Char at index 7: " + str.charAt(7)); // 输出: W

        // substring(int beginIndex): 返回从指定索引开始到字符串末尾的子字符串
        System.out.println("Substring from index 7: " + str.substring(7)); // 输出: World!

        // substring(int beginIndex, int endIndex): 返回从指定索引开始到指定索引结束的子字符串
        System.out.println("Substring from index 7 to 12: " + str.substring(7, 12)); // 输出: World

        // concat(String str): 连接字符串
        System.out.println("Concatenated string: " + str.concat(" Welcome")); // 输出: Hello, World! Welcome

        // replace(char oldChar, char newChar): 替换字符
        System.out.println("Replaced string: " + str.replace('o', 'a')); // 输出: Hella, Warld!

        // toUpperCase(): 将字符串转换为大写
        System.out.println("Uppercase string: " + str.toUpperCase()); // 输出: HELLO, WORLD!

        // toLowerCase(): 将字符串转换为小写
        System.out.println("Lowercase string: " + str.toLowerCase()); // 输出: hello, world!

        // trim(): 去除字符串两端的空白字符
        String strWithSpaces = "  Hello, World!  ";
        System.out.println("Trimmed string: " + strWithSpaces.trim()); // 输出: Hello, World!

        // indexOf(String str): 返回指定子字符串第一次出现的索引
        System.out.println("Index of 'World': " + str.indexOf("World")); // 输出: 7

        // lastIndexOf(String str): 返回指定子字符串最后一次出现的索引
        System.out.println("Last index of 'o': " + str.lastIndexOf('o')); // 输出: 8

        // contains(CharSequence s): 判断字符串是否包含指定的字符序列
        System.out.println("Contains 'World': " + str.contains("World")); // 输出: true

        // startsWith(String prefix): 判断字符串是否以指定的前缀开始
        System.out.println("Starts with 'Hello': " + str.startsWith("Hello")); // 输出: true

        // endsWith(String suffix): 判断字符串是否以指定的后缀结束
        System.out.println("Ends with 'World!': " + str.endsWith("World!")); // 输出: true

        // equals(Object anObject): 判断字符串是否与指定对象相等
        System.out.println("Equals 'Hello, World!': " + str.equals("Hello, World!")); // 输出: true

        // compareTo(String anotherString): 按字典顺序比较两个字符串
        System.out.println("Compare to 'Hello, World!': " + str.compareTo("Hello, World!")); // 输出: 0
    }
}

StringBuilder

StringBuilder 类表示可变的字符序列。与 String 不同,StringBuilder 对象的内容可以被修改。

常用方法示例:

public class StringBuilderExample {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder("Hello");

        // append(String str): 追加字符串
        sb.append(", World!");
        System.out.println("Appended string: " + sb.toString()); // 输出: Hello, World!

        // insert(int offset, String str): 在指定位置插入字符串
        sb.insert(5, " there");
        System.out.println("Inserted string: " + sb.toString()); // 输出: Hello there, World!

        // delete(int start, int end): 删除指定范围内的字符
        sb.delete(5, 11);
        System.out.println("Deleted string: " + sb.toString()); // 输出: Hello, World!

        // reverse(): 反转字符串
        sb.reverse();
        System.out.println("Reversed string: " + sb.toString()); // 输出: !dlroW ,olleH

        // setCharAt(int index, char ch): 设置指定索引处的字符
        sb.reverse().setCharAt(7, 'W');
        System.out.println("Set char at index 7: " + sb.toString()); // 输出: Hello, World!

        // length(): 返回字符串的长度
        System.out.println("Length: " + sb.length()); // 输出: 13

        // capacity(): 返回当前容量
        System.out.println("Capacity: " + sb.capacity()); // 输出: 21

        // ensureCapacity(int minimumCapacity): 确保容量至少等于指定的最小值
        sb.ensureCapacity(50);
        System.out.println("Ensured capacity: " + sb.capacity()); // 输出: 50

        // charAt(int index): 返回指定索引处的字符
        System.out.println("Char at index 7: " + sb.charAt(7)); // 输出: W

        // substring(int start): 返回从指定索引开始到字符串末尾的子字符串
        System.out.println("Substring from index 7: " + sb.substring(7)); // 输出: World!

        // substring(int start, int end): 返回从指定索引开始到指定索引结束的子字符串
        System.out.println("Substring from index 7 to 12: " + sb.substring(7, 12)); // 输出: World
    }
}

StringBuffer

StringBuffer 类也表示可变的字符序列,但与 StringBuilder 不同,StringBuffer 是线程安全的。

常用方法示例:

public class StringBufferExample {
    public static void main(String[] args) {
        StringBuffer sbuf = new StringBuffer("Hello");

        // append(String str): 追加字符串
        sbuf.append(", World!");
        System.out.println("Appended string: " + sbuf.toString()); // 输出: Hello, World!

        // insert(int offset, String str): 在指定位置插入字符串
        sbuf.insert(5, " there");
        System.out.println("Inserted string: " + sbuf.toString()); // 输出: Hello there, World!

        // delete(int start, int end): 删除指定范围内的字符
        sbuf.delete(5, 11);
        System.out.println("Deleted string: " + sbuf.toString()); // 输出: Hello, World!

        // reverse(): 反转字符串
        sbuf.reverse();
        System.out.println("Reversed string: " + sbuf.toString()); // 输出: !dlroW ,olleH

        // setCharAt(int index, char ch): 设置指定索引处的字符
        sbuf.reverse().setCharAt(7, 'W');
        System.out.println("Set char at index 7: " + sbuf.toString()); // 输出: Hello, World!

        // length(): 返回字符串的长度
        System.out.println("Length: " + sbuf.length()); // 输出: 13

        // capacity(): 返回当前容量
        System.out.println("Capacity: " + sbuf.capacity()); // 输出: 21

        // ensureCapacity(int minimumCapacity): 确保容量至少等于指定的最小值
        sbuf.ensureCapacity(50);
        System.out.println("Ensured capacity: " + sbuf.capacity()); // 输出: 50

        // charAt(int index): 返回指定索引处的字符
        System.out.println("Char at index 7: " + sbuf.charAt(7)); // 输出: W

        // substring(int start): 返回从指定索引开始到字符串末尾的子字符串
        System.out.println("Substring from index 7: " + sbuf.substring(7)); // 输出: World!

        // substring(int start, int end): 返回从指定索引开始到指定索引结束的子字符串
        System.out.println("Substring from index 7 to 12: " + sbuf.substring(7, 12)); // 输出: World
    }
}

三者的区别

  • String

    • 不可变性:一旦创建,内容不能被改变。
    • 线程安全:由于不可变性,天然线程安全。
    • 性能:适用于不频繁修改字符串的场景,频繁修改会导致大量对象创建和垃圾回收。
  • StringBuilder

    • 可变性:内容可以被修改。
    • 非线程安全:适用于单线程环境。
    • 性能:在单线程环境下性能优于 StringBuffer,适用于频繁修改字符串的场景。
  • StringBuffer

    • 可变性:内容可以被修改。
    • 线程安全:所有公共方法都是同步的,适用于多线程环境。
    • 性能:在多线程环境下性能略低于 StringBuilder,但在单线程环境下性能也较差。

总结

  • 使用 String 适用于字符串不频繁修改且不需要线程安全的场景。
  • 使用 StringBuilder 适用于单线程环境下需要频繁修改字符串的场景。
  • 使用 StringBuffer 适用于多线程环境下需要频繁修改字符串的场景。

        通过以上解释和示例代码,我们可以清楚地了解到 String   StringBuilder   StringBuffer 的区别和使用场景。选择合适的类可以提高代码的性能和可维护性。

标签:Java,String,StringBuilder,System,字符串,println,World,out
From: https://blog.csdn.net/Broken_x/article/details/141685218

相关文章

  • Java Script网页设计案例
    1.JavaScript网页设计案例下面我将提供一个简单的JavaScript网页设计案例,该案例将实现一个动态的待办事项列表(TodoList)。用户可以在页面上添加新的待办事项,标记它们为已完成,以及删除它们。这个案例将使用HTML来构建页面结构,CSS来美化页面,以及JavaScript来添加动态功能。1.1HT......
  • 一篇文章讲清楚Java中的反射
    介绍每个类都有一个Class对象,包含了与类有关的信息。当编译一个新类时,会产生一个同名的.class文件,该文件内容保存着Class对象。类加载相当于Class对象的加载。类在第一次使用时才动态加载到JVM中,可以使用Class.forName("com.mysql.jdbc.Driver")这种方式来控制类的加......
  • JavaScript开发学习札记:一位Java后端程序员的成长之路
    前言:        这是一篇关于JavaScript的学习笔记,目的是针对java后端开发人员,快速入门并掌握JavaScript这门语言的基本使用,并且能够进入下一阶段框架的学习。引言:为什么学习JavaScript?JavaScript是web开发人员必须学习的3门语言中的一门:HTML定义了网页的内......
  • java.time包时间类浅谈
    Java早期日期时间API:java.util.Date与java.util.Calendar一、背景在Java的早期版本中,处理日期和时间的需求主要由java.util.Date类和随后加入的java.util.Calendar类来满足。这两个类在Java1.0和Java1.1中分别被引入,为Java程序提供了基本的日期和时间操作能力。然而,随着......
  • 一篇文章讲清楚Java中的反射
    介绍每个类都有一个Class对象,包含了与类有关的信息。当编译一个新类时,会产生一个同名的.class文件,该文件内容保存着Class对象。类加载相当于Class对象的加载。类在第一次使用时才动态加载到JVM中,可以使用Class.forName("com.mysql.jdbc.Driver")这种方式来控制类的......
  • 2024年高频Java面试题
    1、java反射的作用与原理1、定义:反射机制是在运行时,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意个对象,都能够调用它的任意一个方法。在java中,只要给定类的名字,就可以通过反射机制来获得类的所有信息。这种动态获取的信息以及动态调用对象的方法的功能称为Ja......
  • 第四章 Java核心类库 第二节 常用Java类库
    1.Math类与常用数学方法首先,我们来看一下Math类。Math类简介:Math类提供了一组用于数学运算的静态方法,包括求绝对值、取整、平方根、幂运算等常见操作。这些方法都是静态的,意味着我们可以直接通过类名调用它们。常用方法:abs():返回绝对值。ceil()和floor():分别返回向......
  • 全栈程序员 | 精通安卓、鸿蒙,小程序,Java、Vue.js、SpringBoot及更多技术
    我是一个全栈程序员,擅长多种开发技术,包括安卓开发、Java编程、Vue.js、SpringBoot以及小程序开发等。我在技术上有广泛的涉猎,并致力于将创新解决方案应用于实际项目中。无论是开发高性能的安卓应用,还是构建响应式网页、实现复杂的后端功能,我都能提供专业的技术支持和高质量的代......
  • java中的enum-java中特殊的class;通过字节码来分析enum构成
    §1 先思考一个问题先思考一个问题:我们在enum类里,可以直接使用 values() 或 valueOf(Stringname) 方法,我们也没有在enum类里定义这两个方法,怎么就能直接使用呢? 这里先按下不表。下面是正文。§2enum类及其编译后的字节码在java编程中,我们经常会定义和使用枚举。简......
  • 计算机毕业设计选题推荐-在线音乐网站-音乐专辑商城-Java/Python项目实战
    ✨作者主页:IT研究室✨个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。☑文末获取源码☑精彩专栏推荐⬇⬇⬇Java项目Python项目安卓项目微信小程序项目......