首页 > 其他分享 >Android开发 - StringBuilder 类处理字符串解析

Android开发 - StringBuilder 类处理字符串解析

时间:2024-08-26 20:25:53浏览次数:10  
标签:String StringBuilder sb 字符串 World Android Hello

StringBuilder 是什么

  • StringBuilderJava 中用于处理字符串的一个。相较于 String 类,它更高效,尤其是在需要频繁修改字符串内容的场景下

String 的不可变性

  • String不可变的,也就是说,一旦创建了一个 String 对象,它的内容无法再改变了。例如,执行以下代码时:

    String str = "Hello";
    str = str + " World";
    
  • 虽然看起来修改了 str 的内容,但实际上创建了一个新的 String 对象("Hello World"),然后将 str 引用指向这个新对象原来的字符串 "Hello" 依然存在于内存中(如果没有其他引用,它会被垃圾回收)。因此,如果需要频繁地修改字符串内容(比如在循环中拼接字符串),这种方式就会导致大量内存浪费和性能损耗

StringBuilder 的可变性

  • StringBuilder 是一个可变的字符序列,提供了很多修改字符序列内容方法(比如 append、insert、delete 等)。当使用 StringBuilder 对象修改字符串时,不会像 String 那样创建新的对象,而是在原有的字符序列上进行修改,这样更高效

    StringBuilder sb = new StringBuilder("Hello");
    sb.append(" World");
    System.out.println(sb.toString());
    
  • 在这个例子中,sb.append(" World") 是在原有的 StringBuilder 对象 sb 的基础上追加字符串 World,而不是创建一个新的对象

StringBuilder 和 StringBuffer 的区别

  • 除了 StringBuilder,还有一个类似的类叫做 StringBuffer两者的主要区别在于:

    • StringBuilder不是线程安全的性能稍高

    • StringBuffer是线程安全的,所有涉及修改内容的方法都是同步的(即线程安全的),因此性能稍低

  • 如果是在单线程环境或不涉及多线程并发修改字符串的情况下,StringBuilder更好的选择

使用场景

  • 需要频繁对字符串进行修改的操作,例如在循环中拼接字符串

  • 需要提高字符串操作性能和效率

  • 代码运行在单线程环境中,或者不需要考虑多线程同步问题

常用方法

  • sb.append(String str):在当前字符串末尾追加内容

    • 参数解析
      • str追加的字符串内容
  • sb.insert(int offset, String str):在指定位置插入内容

    • 参数解析
      • offset插入字符串内容的索引位置
      • str插入的字符串内容
  • sb.delete(int start, int end)删除指定范围内的字符

    • 参数解析
      • start删除范围开始的索引位置
      • end删除范围结尾的索引位置
  • sb.reverse():将字符序列反转

代码示例解析

// 导入 Java 中的 StringBuilder 类
import java.lang.StringBuilder;

public class Main {
    public static void main(String[] args) {
        // 创建一个 StringBuilder 对象,初始化为 "Hello"
        StringBuilder sb = new StringBuilder("Hello");
        
        // append() 方法在当前字符序列末尾追加字符串 " World"
        sb.append(" World"); // 现在 sb 的内容是 "Hello World"
        System.out.println(sb.toString()); // 输出: Hello World

        // insert() 方法在指定位置插入字符串
        sb.insert(5, ","); // 在索引5的位置插入逗号,结果是 "Hello, World"
        System.out.println(sb.toString()); // 输出: Hello, World

        // delete() 方法删除从索引 5 到 6 的字符(左闭右开区间)
        sb.delete(5, 6); // 删除逗号,结果是 "Hello World"
        System.out.println(sb.toString()); // 输出: Hello World

        // reverse() 方法将字符序列反转
        sb.reverse(); // 结果是 "dlroW olleH"
        System.out.println(sb.toString()); // 输出: dlroW olleH

        // 使用 delete() 删除所有内容
        sb.delete(0, sb.length()); // 删除 sb 中的所有字符
        System.out.println(sb.toString()); // 输出: (空字符串)
    }
}

总结

  • StringBuilder 是一个用来高效处理可变字符串,特别是在需要频繁修改字符串内容的场景下。它与 String 的不可变性形成了鲜明对比,也比 StringBuffer 性能更高,但不适用于需要线程安全的场合

标签:String,StringBuilder,sb,字符串,World,Android,Hello
From: https://www.cnblogs.com/ajunjava/p/18381544

相关文章

  • 算法的学习笔记—字符串的排列(牛客JZ38)
    ......
  • (算法)⼆进制求和————<字符串—模拟>
    1.题⽬链接:67.⼆进制求和2.题⽬描述:3.解法(模拟⼗进制的⼤数相加的过程):算法思路:模拟⼗进制中我们列竖式计算两个数之和的过程。但是这⾥是⼆进制的求和,我们不是逢⼗进⼀,⽽是逢⼆进⼀。 C++算法代码: classSolution{public:stringaddBinary(stringa,st......
  • (算法)最⻓回⽂⼦串————<字符串—中⼼扩散>
    1.题⽬链接:5.最⻓回⽂⼦串 2.题⽬描述:3.解法(中⼼扩散):算法思路:枚举每⼀个可能的⼦串⾮常费时,有没有⽐较简单⼀点的⽅法呢?对于⼀个⼦串⽽⾔,如果它是回⽂串,并且⻓度⼤于2,那么将它⾸尾的两个字⺟去除之后,它仍然是个回⽂串。如此这样去除,⼀直除到⻓度⼩于等于2时呢?⻓度......
  • Android接收系统广播
    文章目录Android接收系统广播动态注册监听网络变化静态注册实现开机启动Android接收系统广播Android内置了很多系统级别的广播,我们可以在应用程序中通过监听这些广播来得到各种系统的状态信息。比如手机开机完成后会发出一条广播,电池的电量发生变化会发出一条广播,时......
  • Android广播机制简介
    Android广播机制简介记得在我上学的时候,每个班级的教室里都会装有一个喇叭,这些喇叭都是接入到学校的广播室的,一旦有什么重要的通知,就会播放一条广播来告知全校的师生。类似的工作机制其实在计算机领域也有很广泛的应用,如果你了解网络通信原理应该会知道,在一个IP网络范围中,......
  • 腾讯地图SDK Android版开发 8 覆盖物示例2动画
    腾讯地图SDKAndroid版开发8覆盖物示例2动画动画相关的类和接口帧动画Animation动画Marker接口继承关系Animation接口类及其子接口类AnimationableIAnimationSetTencentMapComponent地图组件接口类Marker动画示例界面布局MapMarkAnimate类常量成员变量初始值创建......
  • 代码训练营 Day9 | 151.翻转字符串里的单词 | 认识KMP算法
    151.翻转字符串里的单词这道题的难度在于如何高效率的处理空格对于python来说不能实现空间O(1)的复杂度,不过对于其他语言来说下面思路可以使用双指针方法同时指向数组的头部循环遍历整个字符串直到数组末尾快指针不能为空,因为快指针是要获取字母的,慢指针是用来获取新的字......
  • 代码训练营 Day8 | 344.反转字符串 | 541.反转字符串II |
    344.反转字符串使用双指针一个指针指向数组开始的位置,一个指针指向数组结束的位置通过循环让两个指针元素相互交换知道两个指针碰到一起classSolution(object):defreverseString(self,s):""":types:List[str]:rtype:NoneDonotretur......
  • day9第四章 字符串part02| 151.翻转字符串里的单词 |卡码网:55.右旋转字符串|28. 实现
    151.翻转字符串里的单词classSolution{publicStringreverseWords(Strings){////删除首尾空格,分割字符串String[]str=s.trim().split("");StringBuildersb=newStringBuilder();////倒序遍历单词列表for(inti......
  • C语言初阶(四)字符函数和字符串函数
    字符分类函数C语言中有⼀系列的函数是专门做字符分类的,也就是⼀个字符是属于什么类型的字符的这些函数的使用都需要包含⼀个头文件是ctype.h函数   如果他的参数符合下列条件就返回真iscntrl   任何控制字符isspace   空白字符:空格‘’,换页‘\f’,换行'\n......