StringBuilder類
StringBuilder對象與String對象類似,只是它可以被修改,在內(nèi)部,這些對象被視為包含一系列字符的可變長度數(shù)組,在任何時候,可以通過方法調(diào)用來改變序列的長度和內(nèi)容。
除非字符串構(gòu)建器在更簡單的代碼(參見本節(jié)末尾的示例程序)或更好的性能方面提供優(yōu)勢,否則應(yīng)始終使用字符串,例如,如果需要連接大量字符串,則附加到StringBuilder對象會更有效。
長度和容量與String類一樣,StringBuilder類有一個length()方法,該方法返回構(gòu)建器中字符序列的長度。
與字符串不同,每個字符串構(gòu)建器還具有容量,即已分配的字符空間數(shù),capacity()方法返回的容量始終大于或等于長度(通常大于),并將根據(jù)需要自動擴展以適應(yīng)字符串構(gòu)建器的添加。
StringBuilder構(gòu)造函數(shù):
構(gòu)造函數(shù) | 描述 |
---|---|
StringBuilder() | 創(chuàng)建一個容量為16的空字符串構(gòu)建器(16個空元素)。 |
StringBuilder(CharSequence cs) | 構(gòu)造一個字符串構(gòu)建器,其中包含與指定CharSequence相同的字符,以及尾隨CharSequence的額外16個空元素。 |
StringBuilder(int initCapacity) | 創(chuàng)建具有指定初始容量的空字符串構(gòu)建器。 |
StringBuilder(String s) | 創(chuàng)建一個字符串構(gòu)建器,其值由指定的字符串初始化,另外還有16個空元素尾隨該字符串。 |
例如,以下代碼:
// creates empty builder, capacity 16 StringBuilder sb = new StringBuilder(); // adds 9 character string at beginning sb.append("Greetings");
將生成一個長度為9且容量為16的字符串構(gòu)建器:
StringBuilder類有一些與String類沒有的長度和容量相關(guān)的方法:
方法 | 描述 |
---|---|
void setLength(int newLength) | 設(shè)置字符序列的長度; 如果newLength小于length(),則截斷字符序列中的剩余字符; 如果newLength大于length(),則在字符序列的末尾添加null字符。 |
void ensureCapacity(int minCapacity) | 確保容量至少等于指定的最小值。 |
許多操作(例如,append()、insert()或setLength())可以增加字符串構(gòu)建器中字符序列的長度,從而使結(jié)果length()大于capacity(),發(fā)生這種情況時,容量會自動增加。
StringBuilder操作String中不可用的StringBuilder上的主要操作是append()和insert()方法,它們被重載以接受任何類型的數(shù)據(jù),每個都將其參數(shù)轉(zhuǎn)換為字符串,然后將該字符串的字符追加或插入字符串構(gòu)建器中的字符序列,append方法總是在現(xiàn)有字符序列的末尾添加這些字符,而insert方法在指定點添加字符。
以下是StringBuilder類的許多方法。
方法 | 描述 |
---|---|
StringBuilder append(boolean b) StringBuilder append(char c) StringBuilder append(char[] str) StringBuilder append(char[] str, int offset, int len) StringBuilder append(double d) StringBuilder append(float f) StringBuilder append(int i) StringBuilder append(long lng) StringBuilder append(Object obj) StringBuilder append(String s) |
將參數(shù)追加到此字符串構(gòu)建器,在附加操作發(fā)生之前,數(shù)據(jù)將轉(zhuǎn)換為字符串。 |
StringBuilder delete(int start, int end) StringBuilder deleteCharAt(int index) |
第一個方法在StringBuilder的字符序列中刪除從start到end-1(包括)的子序列; 第二種方法刪除位于索引處的字符。 |
StringBuilder insert(int offset, boolean b) StringBuilder insert(int offset, char c) StringBuilder insert(int offset, char[] str) StringBuilder insert(int index, char[] str, int offset, int len) StringBuilder insert(int offset, double d) StringBuilder insert(int offset, float f) StringBuilder insert(int offset, int i) StringBuilder insert(int offset, long lng) StringBuilder insert(int offset, Object obj) StringBuilder insert(int offset, String s) |
將第二個參數(shù)插入到字符串構(gòu)建器中; 第一個整數(shù)參數(shù)表示要在其之前插入數(shù)據(jù)的索引; 在插入操作發(fā)生之前,數(shù)據(jù)將轉(zhuǎn)換為字符串。 |
StringBuilder replace(int start, int end, String s) void setCharAt(int index, char c) |
替換此字符串構(gòu)建器中的指定字符。 |
StringBuilder reverse() | 反轉(zhuǎn)此字符串構(gòu)建器中的字符序列。 |
String toString() | 返回包含構(gòu)建器中的字符序列的字符串。 |
你可以在StringBuilder對象上使用任何String方法,首先使用StringBuilder類的toString()方法將字符串構(gòu)建器轉(zhuǎn)換為字符串,然后使用StringBuilder(String str)構(gòu)造函數(shù)將字符串轉(zhuǎn)換回字符串構(gòu)建器。一個例子
標(biāo)題為“字符串”一節(jié)中列出的StringDemo程序是一個示例程序,如果使用StringBuilder而不是String,該程序?qū)⒏行А?/p>
StringDemo反轉(zhuǎn)了一個回文,下面是它的清單:
public class StringDemo { public static void main(String[] args) { String palindrome = "Dot saw I was Tod"; int len = palindrome.length(); char[] tempCharArray = new char[len]; char[] charArray = new char[len]; // put original string in an // array of chars for (int i = 0; i < len; i++) { tempCharArray[i] = palindrome.charAt(i); } // reverse array of chars for (int j = 0; j < len; j++) { charArray[j] = tempCharArray[len - 1 - j]; } String reversePalindrome = new String(charArray); System.out.println(reversePalindrome); } }
運行該程序會產(chǎn)生以下輸出:
doT saw I was toD
為了完成字符串反轉(zhuǎn),程序?qū)⒆址D(zhuǎn)換為字符數(shù)組(第一個for循環(huán)),將數(shù)組反轉(zhuǎn)為第二個數(shù)組(第二個for循環(huán)),然后轉(zhuǎn)換回字符串。
如果將palindrome字符串轉(zhuǎn)換為字符串構(gòu)建器,則可以在StringBuilder類中使用reverse()方法,它使代碼更簡單,更易于閱讀:
public class StringBuilderDemo { public static void main(String[] args) { String palindrome = "Dot saw I was Tod"; StringBuilder sb = new StringBuilder(palindrome); sb.reverse(); // reverse it System.out.println(sb); } }
運行此程序會產(chǎn)生相同的輸出:
doT saw I was toD
請注意,println()打印字符串構(gòu)建器,如下所示:
System.out.println(sb);
因為sb.toString()是隱式調(diào)用的,因為它與println()調(diào)用中的任何其他對象一樣。
還有一個StringBuffer類與StringBuilder類完全相同,但它是線程安全的,因為它的方法是同步的,線程將在關(guān)于并發(fā)的課程中討論。上一篇:比較字符串和字符串的部分 下一篇:自動裝箱和拆箱
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/72907.html
摘要:創(chuàng)建字符串教程字符串長度用于獲取有關(guān)對象的信息的方法稱為訪問器方法。類在中被提出,它和之間的最大不同在于的方法不是線程安全的不能同步訪問。然而在應(yīng)用程序要求線程安全的情況下,則必須使用類。 一般地,當(dāng)需要使用數(shù)字的時候,我們通常使用內(nèi)置數(shù)據(jù)類型,如:byte、int、long、double 等。 在實際開發(fā)過程中,我們經(jīng)常會遇到需要使用對象,而不是內(nèi)置數(shù)據(jù)類型的情形。為了解決這個問題,...
字符串 在Java編程中廣泛使用的字符串是一系列字符,在Java編程語言中,字符串是對象。 Java平臺提供String類來創(chuàng)建和操作字符串。 創(chuàng)建字符串 創(chuàng)建字符串的最直接方法是編寫: String greeting = Hello world!; 在這種情況下,Hello world!是一個字符串文字 — 代碼中的一系列字符,用雙引號括起來,每當(dāng)它在代碼中遇到字符串文字時,編譯器就會創(chuàng)建一個帶...
摘要:我們的引擎使用預(yù)定義的分隔符來連接日志中的信息,并存儲在一個中。在抽象類中定義帶參數(shù)的構(gòu)造函數(shù)在抽象類中定義動態(tài)屬性的第一種方法是定義一個參數(shù)的構(gòu)造函數(shù)。 翻譯:瘋狂的技術(shù)宅原文:http://programmergate.com/def...本文首發(fā)微信公眾號:充實的腦洞 Abstract關(guān)鍵字通常被用于類和方法,用來把某些行為的實現(xiàn)委托給子類。由于Java不支持抽象屬性,如果你試圖...
摘要:通道可以異步讀寫。使用的方法讀取數(shù)據(jù)創(chuàng)建一個讀數(shù)據(jù)緩沖區(qū)對象從通道中讀取數(shù)據(jù)使用的方法寫入數(shù)據(jù)創(chuàng)建一個寫數(shù)據(jù)緩沖區(qū)對象寫入數(shù)據(jù)關(guān)閉完成使用后,您必須關(guān)閉它。五提供了一種被稱為的新功能,也稱為本地矢量。功能是通道提供的并不是。 歷史回顧: Java NIO 概覽 Java NIO 之 Buffer(緩沖區(qū)) 其他高贊文章: 面試中關(guān)于Redis的問題看這篇就夠了 一文輕松搞懂redis集...
摘要:最近在研究,順便就會看看數(shù)據(jù)庫連接這一塊的知識,所以當(dāng)我發(fā)現(xiàn)有通用和這兩款網(wǎng)絡(luò)上比較火的簡化開發(fā)的優(yōu)秀軟件之后。先創(chuàng)建一個的項目,可以參考我之前的文章的簡單教程一項目的創(chuàng)建。打開文件,將最新的相關(guān)的包都引用進(jìn)來。 最近在研究springboot,順便就會看看數(shù)據(jù)庫連接這一塊的知識 ,所以當(dāng)我發(fā)現(xiàn)有通用Mapper和MybatisPlus這兩款網(wǎng)絡(luò)上比較火的簡化mybatis開發(fā)的優(yōu)秀軟...
閱讀 1699·2021-10-29 13:11
閱讀 870·2021-09-22 10:02
閱讀 1719·2021-08-20 09:35
閱讀 1581·2019-08-30 15:54
閱讀 2533·2019-08-30 15:44
閱讀 1413·2019-08-29 16:52
閱讀 1131·2019-08-23 12:56
閱讀 790·2019-08-22 15:16