ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

【Java 常用类】java.lang包(7)StringBuilder、StringBuffer类的常用方法

2020-01-29 20:09:11  阅读:258  来源: 互联网

标签:lang 常用 java int StringBuilder System println 字符串 sb


文章目录




前言

上一篇 【Java 常用类】java.lang包(6)String类的常用方法 里讲了String的常用方法,但是String是不可变的,如果需要操作大量字符拼接时太占用内存空间。

现在讲可变字符序列,StringBuilder、StringBuffer类的常用方法。

因为这两个类方法与使用都基本一样,只是多线程环境下安全与非安全。所以这篇文章就用StringBuilder示例。

一、大纲

一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。
在这里插入图片描述

public final class StringBuilder extends Object implements Serializable, CharSequence

二、使用

1.构造器

1.1 创建

他有不同的构造器用于创建一个可变字符序列StringBuilder。

        StringBuilder sb01 = new StringBuilder(); // 创建一个未初始化的StringBuilder
        StringBuilder sb02 = new StringBuilder("初始化init"); // 创建一个带有初始化字符串的StringBuilder
        StringBuilder sb03 = new StringBuilder(20); // 创建一个指定初始化容量的StringBuilder

2.常用方法

2.1 获取

以下方法可以获取到该StringBuilder中的相关信息。

如:容量、长度、查找字符或字符串出现的位置。

        StringBuilder sb = new StringBuilder("hello");
        // 获取容量
        int c = sb.capacity();
        System.out.println(c); // 21

        // 获取该字符串长度
        int len = sb.length();
        System.out.println(len); // 5

        // 获取字符或字符串第一次出现的位置(从头开始,或从指定位置开始)
        int i = sb.indexOf("e"); // 从头开始
        System.out.println(i); // 1
        int i1 = sb.indexOf("e", 1); // 从指定位置开始
        System.out.println(i1); // 1

        // 获取字符或字符串第一次出现的位置(从尾部开始,或从指定尾部位置开始)
        int li = sb.lastIndexOf("e"); // 从尾部开始
        System.out.println(li); // 1
        int li1 = sb.lastIndexOf("e", 5); // 从指定尾部位置开始
        System.out.println(li1); // 1
        
        // 获取指定索引处的char值
        char ca = sb.charAt(0);
        System.out.println(ca); // h
2.2 追加

append(String str)
将指定的字符串追加到此字符序列。

可以将多种数据类型的值,添加到StringBuilder中。

        StringBuilder sb = new StringBuilder();
        sb.append("hello ");
        sb.append(123);
        System.out.println(sb); // hello 123
2.3 插入 + 移除

insert(int offset, String str)
将字符串插入此字符序列中。

该方法可以将多种数据类型的值,插入到StringBuilder中。

delete(int start, int end)
移除此序列的子字符串中的字符。
deleteCharAt(int index)
移除此序列指定位置上的 char。

这两个方法可以移除指定位置的字符或字符串。

        StringBuilder sb = new StringBuilder("hello");
        // 插入
        sb.insert(sb.length(), "?"); // 尾部插入一个?
        sb.insert(0, '-'); // 首部插入一个-
        System.out.println(sb); // -hello?

        // 移除
        sb.delete(sb.length()-1, sb.length()); // 移除尾部的?
        sb.deleteCharAt(0); // 移除指定索引的字符。移除首部的-
        System.out.println(sb); // hello
2.4 替换(字符)

setCharAt(int index, char ch)
将给定索引处的字符设置为 ch。

将指定索引处的字符设置为新的字符。

        StringBuilder sb = new StringBuilder("hello");
        sb.setCharAt(0, 'H');
        System.out.println(sb); // Hello
2.5 替换(字符串)

replace(int start, int end, String str)
使用给定 String 中的字符替换此序列的子字符串中的字符。

从指定位置开始到指定位置结束,替换成其他的字符串。

        StringBuilder sb = new StringBuilder("hello xxxxx!");

        String s = "world";
        // 用字符串s从索引为6的位置开始替换到索引为11的位置。
        sb.replace(6, 11, s);
        System.out.println(sb); // hello world!
2.6 反转字符串

reverse()
将此字符序列用其反转形式取代。

就是将StringBuilder中的字符串,翻转过来。这个方法还挺常用的。

        StringBuilder sb = new StringBuilder("hello");
        sb.reverse();
        System.out.println(sb); // olleh
2.7 获得子字符串

substring(int start, int end) 、substring(int start)
返回一个新的 String,它包含此序列当前所包含字符的子序列。

从指定位置开始获取该字符串的子字符串。和String一样。

        StringBuilder sb = new StringBuilder("hello");
        String sub = sb.substring(2);
        System.out.println(sub); // llo

        String sub02 = sb.substring(2, 5);
        System.out.println(sub02); // llo

最后

StringBuilder 和 StringBuffer 类用法是一样的,学会任何一个另一个也就会了。

他们两个的好几个方法都和String类是一样的,学过String基本就触类旁通了。

相关

更多常用类请查看:【Java 常用类】目录

长生的梦呓 发布了110 篇原创文章 · 获赞 127 · 访问量 2万+ 私信 关注

标签:lang,常用,java,int,StringBuilder,System,println,字符串,sb
来源: https://blog.csdn.net/weixin_44034328/article/details/104109136

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有