StringBuilder詳解

1、簡介

StringBuilder和StringBuffer一樣,都是繼承自抽象類AbstractStringBuilder類,也是一個可變的字符序列。StringBuilder和StringBuffer非常相似,甚至有互相兼容的API,不過,StringBuilder不是線程安全的,這是和StringBuffer的主要區別。StringBuilder的層次結構如下:

StringBuilder類被設計成在不需要多線程安全的情況下替換StringBuffer類的。如果程序中不需要多線程安全,推薦使用StringBuilder類,因為沒有了同步的操作而速度上比較快。

StringBuilder和StringBuffer一樣,主要的操作有append和insert等。

2、StringBuilder原理


StringBuilder的原理和StringBuffer一樣,不同之處在于StringBuilder不需要考慮線程安全。具體的原理參見另一篇StringBuffer詳解。


3、常用方法

StringBuilder的常用方法和StringBuffer的一樣。列出如下:

(1)構造函數

StringBuilder有四個構造函數:

  • StringBuilder() value內容為空,并設置容量為16個字節;
  • StringBuilder(CharSequece seq) ?使用seq初始化,容量在此基礎上加16;
  • StringBuilder(int capacity) 設置特定容量;
  • StringBuilder(String str) ?使用str初始化,容量str大小的基礎上加16;

(2)append方法

由于繼承了Appendable接口,所以要實現append方法,StringBuilder類對幾乎所有的基本類型都重載了append方法:

  • append(boolean b)
  • append(char c)
  • append(char[] str)
  • append(char[] str,int offset,int len)
  • append(CharSequence s)
  • append(CharSequence s,int start,int end)
  • append(double d)
  • append(float f)
  • append(int i)
  • append(long lng)
  • append(Object obj)
  • append(String str)
  • append(StringBuffer sb)

(3)insert方法

insert方法可以控制插入的起始位置,也幾乎對所有的基本類型都重載了insert方法:

  • insert(int offser,boolean b)
  • insert(int offset,char c)
  • insert(int offset,char[] str)
  • insert(int index,char[] str,int offset,int len)
  • insert(int dsfOffset,CharSequence s)
  • insert(int dsfOffset,CharSequence s,int start,int end)
  • insert(int offset,double d)
  • insert(int offset,float f)
  • insert(int offset,int i)
  • insert(int offset,long l)
  • insert(int offset,Object obj)
  • insert(int offset,String str)

(4)其它會改變內容的方法

上面的那些方法會增加StringBuilder的內容,還有一些方法可以改變StringBuilder的內容:

  • StringBuilder?delete(int start,int end) 刪除從start到end(不包含)之間的內容;
  • StringBuilder?deleteCharAt(int index) 刪除index位置的字符;
  • StringBuilder?replace(int start,int end,String str) 用str中的字符替換value中從start到end位置的子序列;
  • StringBuilder?reverse() 反轉;
  • void setCharAt(int index,char ch) 使用ch替換位置index處的字符;
  • void setLength(int newLength) 可能會改變內容(添加'\0');

(5)其它常用方法

下面這些方法不會改變內容:

  • int capacity() 返回value的大小即容量;
  • int length() 返回內容的大小,即count;
  • char charAt(int index) 返回位置index處的字符;
  • void ensureCapacity(int minimumCapacity) 確保容量至少是minimumCapacity;
  • void getChars(int srcBegin,int srcEnd,char[] dst,int dstBegin) 返回srcBegin到srcEnd的字符到dst;
  • int indexOf(String str) 返回str第一次出現的位置;
  • int indexOf(String str,int fromIndex) 返回從fromIndex開始str第一次出現的位置;
  • int lastIndexOf(String str) 返回str最后出現的位置;
  • int lastIndexOf(String str,int fromIndex) 返回從fromIndex開始最后一次出現str的位置;
  • CharSequence subSequence(int start,int end) 返回字符子序列;
  • String substring(int start) 返回子串;
  • String substring(int start,int end) 返回子串;
  • String toString() 返回value形成的字符串;
  • void trimToSize() 縮小value的容量到真實內容大小;

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/385487.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/385487.shtml
英文地址,請注明出處:http://en.pswp.cn/news/385487.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【線程】互斥鎖

一、互斥鎖 1. 函數原型 pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr); pthread_mutex_destroy(pthread_mutex_t *mutex); 分析: pthread_mutex_t 類型,其本質是一個結構體,為簡化…

ArrayList詳解

1、簡介 ArrayList是Java集合框架中的一個重要的類,它繼承于AbstractList,實現了List接口,是一個長度可變的集合,提供了增刪改查的功能。集合中允許null的存在。ArrayList類還是實現了RandomAccess接口,可以對元素進行…

【進程】進程組

一、進程組 1. 進程組 (1)進程組,也稱之為作業,BSD與1980年前后向UNIX中增加的一個新特性,代表一個或多個進程的集合。每個進程都屬于一個進程組,在waitpid函數和kill函數的參數中都曾經使用到&#xff0c…

函數wait、waitpid、孤兒進程、僵尸進程

一、函數wait、waitpid 一個進程在終止時會關閉所有文件描述符,釋放在用戶空間釋放的內存,但它的PCB還保留著,內核在其中保存一些信息:如果是正常終止時則保存著退出狀態,如果是異常終止則保存著導致該進程終止的信號是…

MySQL中的字符集與字符序

這篇文章詳細介紹一下MySQL中的字符集和字符序相關的問題,里里外外地了解一下字符集和字符序的方方面面,同時重點說明一下開發中需要注意的問題。 文章基于MySQL 8.0,也會涉及到5.7版本。主要參考MySQL手冊:https://dev.mysql.com…

MySQL中的JSON

從5.7.8開始,MySQL開始支持JSON類型,用于存儲JSON數據。 JSON類型的加入模糊了關系型數據庫與NoSQL之間的界限,給日常開發也帶來了很大的便利。 這篇文章主要介紹一下MySQL中JSON類型的使用,主要參考MySQL手冊:https…

【C++ Primer | 15】虛函數表剖析(一)

一、虛函數 1. 概念 多態指當不同的對象收到相同的消息時,產生不同的動作 編譯時多態(靜態綁定),函數重載,運算符重載,模板。運行時多態(動態綁定),虛函數機制。為了實現…

【Leetcode | 02】二叉樹、線性表目錄

二叉樹序號題號1 94. 二叉樹的中序遍歷 295. 不同的二叉搜索樹 II396. 不同的二叉搜索樹4 98. 驗證二叉搜索樹 5100. 相同的樹6101. 對稱二叉樹7102. 二叉樹的層次遍歷8103. 二叉樹的鋸齒形層次遍歷9104. 二叉樹的最大深度10105. 從前序與中序遍歷序列構造二叉樹11106. 從中序與…

Leetcode 118. 楊輝三角

給定一個非負整數 numRows&#xff0c;生成楊輝三角的前 numRows 行。 在楊輝三角中&#xff0c;每個數是它左上方和右上方的數的和。 示例: 輸入: 5 輸出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1] ] class Solution { public:vector<vector<int>> generate(…

管道符、重定向與環境變量

輸入輸出重定向 輸入重定向&#xff1a;將文件內容導入到命令中&#xff1b;輸出重定向&#xff1a;將命令執行后顯示到屏幕上的內容導入到文件中&#xff0c;不在屏幕中顯示。共分為&#xff1a;標準輸入重定向&#xff08;文件描述符為0&#xff09;、標準覆蓋輸出&#xff0…

【C++ Primer | 0 】字符串函數實現

1. memcpy函數原型&#xff1a; void* memcpy(void* dst, const void* src, size_t size); void* memmove(void* dst, const void* src, size_t size); 分析&#xff1a; source和destin所指的內存區域可能重疊&#xff0c;但是如果source和destin所指的內存區域重疊,那么這個…

編寫Shell腳本(批處理,一次執行多條命令)

Bash終端的優勢&#xff1a;1.上下鍵重復執行命令&#xff1b;2.tab鍵自動補齊&#xff1b;3.提供有用的環境變量&#xff1b;4.批處理。 shell腳本文件建議以.sh為后綴。 其實vim創建文本文件時&#xff0c;對名字無要求&#xff0c;但最好規定格式。 echo $SHELL&#xff08…

判斷用戶的參數(條件測試語句)

說明$?: $&#xff1f;為上一次命令的執行返回值&#xff0c;若上一次命令正常執行&#xff0c;則返回0&#xff1b;若執行出錯&#xff0c;則返回一個非0的隨機數。比如創建一個已經存在的目錄&#xff0c;則返回一個非0數。 另外&#xff0c;測試語句成立返回0&#xff0c…

流程控制語句(bash)

1.if控制語句 if then fi if then else fi if then elif then elif then else fi if 條件表達式 then 命令序列&#xff08;滿足條件才執行&#xff09; #注意&#xff0c;如果if與then&#xff08;elif與then&#xff09;寫在同一行&#xff0c;要用;隔開&#xff…

用戶身份與文件的權限(普通權限、特殊權限、隱藏權限和文件控制列表ACL)

用戶身份 root用戶是存在于所有類UNIX操作系統中的超級用戶&#xff0c;它擁有最高的系統所有權。root用戶的用戶身份號碼UID為0&#xff0c;UID相當于用戶的身份證號碼一樣&#xff0c;具有唯一性。管理員用戶&#xff08;超級用戶&#xff09;UID為0&#xff1b;系統用戶UID為…

存儲結構與磁盤劃分

文件系統層次化標準&#xff08;FHS&#xff0c;file system hierarchy standard&#xff09; 在windows操作系統中&#xff0c;要找到一個文件需要先進入該文件所在的磁盤分區&#xff08;如C:\等 C:\ZSX\zsx.txt&#xff09;&#xff0c;然后在進入該分區下的一個具…

Linux中常用文件的含義

在Linux中配置了服務文件后&#xff0c;需要重啟該服務&#xff0c;配置信息才會生效。 /etc/passwd 保存了系統中所有用戶的信息&#xff0c;一旦用戶的登陸終端設置為/sbin/nologin&#xff0c;則不再允許登錄到系統 /etc/shadow與/etc/passwd均為用戶信息文件 /…