Java--String烁设、StringBuilder替梨、StringBuffer

在 Java 中,字符串被作為 String 類(lèi)型的對(duì)象處理装黑。String 類(lèi)位于 java.lang 包中副瀑。默認(rèn)情況下,該包被自動(dòng)導(dǎo)入所有的程序恋谭。

Java 中字符串的不變性

String 對(duì)象創(chuàng)建后則不能被修改糠睡,是不可變的,所謂的修改其實(shí)是創(chuàng)建了新的對(duì)象箕别,所指向的內(nèi)存空間不同铜幽。

注意:

  • 一旦一個(gè)字符串在內(nèi)存中創(chuàng)建滞谢,則這個(gè)字符串將不可改變串稀。如果需要一個(gè)可以改變的字符串,我們可以使用StringBuffer或者StringBuilder狮杨。
  • 每次 new 一個(gè)字符串就是產(chǎn)生一個(gè)新的對(duì)象母截,即便兩個(gè)字符串的內(nèi)容相同,使用 ”==” 比較時(shí)也為 ”false” ,如果只需比較內(nèi)容是否相同橄教,應(yīng)使用 ”equals()” 方法清寇。

String 類(lèi)的常用方法

1喘漏、獲取

1.1 獲取字符串的長(zhǎng)度
length();

1.2 獲取指定位置的字符
char charAt(int index);

1.3 獲取指定字符的位置。如果不存在返回 -1华烟。
int indexOf(int ch); // 返回第一次找到的字符角標(biāo)
int indexOf(int ch,int fromIndex); // 返回從指定位置開(kāi)始第一次找到的角標(biāo)
int indexOf(String str); // 返回第一次找到的字符串角標(biāo)
int indexOf(String str,int fromIndex);

int lastIndexOf(int ch);
int lastIndexOf(int ch,int fromIndex);
int lastIndexOf(String str);
int lastIndexOf(String str,int fromIndex);

1.4 獲取子串
String substring(int start); // 從 start 位開(kāi)始翩迈,到 length()-1 為止.
String substring(int start,int end); // 從 start 開(kāi)始到 end 為止。 //包含 start 位盔夜,不包含end 位负饲。
substring(0,str.length()); // 獲取整串

2、判斷

boolean contains(String substring); // 字符串中是否包含指定的字符串
boolean startsWith(string); // 字符串是否以指定字符串開(kāi)頭
boolean endsWith(string); // 字符串是否以指定字符串結(jié)尾
boolean equals(string); // 覆蓋了 Object 中的方法喂链,判斷字符串內(nèi)容是否相同返十。
boolean equalsIgnoreCase(string) ; // 判斷字符串內(nèi)容是否相同,忽略大小寫(xiě)

3椭微、轉(zhuǎn)換

3.1 通過(guò)構(gòu)造函數(shù)將字符數(shù)組或者字節(jié)數(shù)組轉(zhuǎn)成字符串
new String(char[]); // 將字符數(shù)組轉(zhuǎn)成字符串洞坑。
new String(char[],offset,count); // 將字符數(shù)組中的一部分轉(zhuǎn)成字符串。

3.2 通過(guò)字符串中的靜態(tài)方法蝇率,將字符數(shù)組轉(zhuǎn)成字符串
static String copyValueOf(char[] );
static String copyValueOf(char[],int offset,int count);
static String valueOf(char[]);
static String valueOf(char[],int offset,int count);

3.3 將基本數(shù)據(jù)類(lèi)型或者對(duì)象轉(zhuǎn)成字符串
static String valueOf(char);
static String valueOf(char[] data)
static String valueOf(char[] data, int offset, int count)
static String valueOf(boolean);
static String valueOf(double);
static String valueOf(float);
static String valueOf(int);
static String valueOf(long);
static String valueOf(Object);

3.4 將字符串轉(zhuǎn)成大小寫(xiě)
String toLowerCase();
String toUpperCase();

3.5 將字符串轉(zhuǎn)成數(shù)組
char[] toCharArray(); // 轉(zhuǎn)成字符數(shù)組迟杂。
byte[] getBytes(); // 可以加入編碼表。轉(zhuǎn)成字節(jié)數(shù)組本慕。

3.6 將字符串切割成子字符串?dāng)?shù)組逢慌。
String[] split(String regex, int limit);

3.7 將字符串進(jìn)行內(nèi)容替換。 注意:修改后變成新字符串间狂,并不是將原字符串直接修改攻泼。
String replace(oldChar,newChar);
String replace(oldstring,newstring);

3.8
String concat(string); // 對(duì)字符串進(jìn)行追加。
String trim(); // 去除字符串兩端的空格
int compareTo(); // 如果參數(shù)字符串等于此字符串鉴象,則返回值 0忙菠;如果此字符串按字典順序小于字符串參數(shù),則返回一個(gè)小于 0 的值纺弊;如果此字符串按字典順序大于字符串參數(shù)牛欢,則返回一個(gè)大于 0 的值。

友情提示:

  1. 使用 substring(beginIndex , endIndex) 進(jìn)行字符串截取時(shí)淆游,包括 beginIndex 位置的字符傍睹,不包括 endIndex 位置的字符。
  2. 那么犹菱,“==” 和 equals() 有什么區(qū)別呢拾稳?
    ==: 判斷兩個(gè)字符串在內(nèi)存中首地址是否相同腊脱,即判斷是否是同一個(gè)字符串對(duì)象
    equals(): 比較存儲(chǔ)在兩個(gè)字符串對(duì)象中的內(nèi)容是否一致

StringBuffer 類(lèi)

一個(gè)線(xiàn)程安全的悍抑,字符的可變序列拂盯。

當(dāng)頻繁操作字符串時(shí)磕仅,就會(huì)額外產(chǎn)生很多臨時(shí)變量。使用 StringBuilder 或 StringBuffer 就可以避免這個(gè)問(wèn)題劫恒。

構(gòu)造一個(gè)其中不帶字符的字符串緩沖區(qū)两嘴,初始容量為 16 個(gè)字符仿荆。

特點(diǎn):

  • 可以對(duì)字符串內(nèi)容進(jìn)行修改拢操。
  • 是一個(gè)容器杠园。
  • 是可變長(zhǎng)度的。
  • 緩沖區(qū)中可以存儲(chǔ)任意類(lèi)型的數(shù)據(jù)。
  • 最終通過(guò) toString()方法需要變成字符串亲配。
容器通常具備一些固定的方法:

C create U update R read D delete

  1. 添加。
    StringBuffer append(data); // 在緩沖區(qū)中追加數(shù)據(jù)苍鲜。追加到尾部洒疚。
    StringBuffer insert(index,data); // 在指定位置插入數(shù)據(jù)油湖。
  2. 刪除。
    StringBuffer delete(start,end); // 刪除從 start 至 end-1 范圍的元素
    StringBuffer deleteCharAt(index); // 刪除指定位置的元素
    //sb.delete(0,sb.length()); // 清空緩沖區(qū)。
  3. 修改矢棚。
    StringBuffer replace(start,end,string); // 將 start 至 end-1 替換成 string
    void setCharAt(index,char); // 替換指定位置的字符
    void setLength(len); // 將原字符串置為指定長(zhǎng)度的字符串
  4. 查找郑什。(查不到返回-1)
    int indexOf(string); // 返回指定子字符串在此字符串中第一次出現(xiàn)處的索引。
    int indexOf(string,int fromIndex); // 從指定位置開(kāi)始查找字符串
    int lastIndexOf(string); // 返回指定子字符串在此字符串中最右邊出現(xiàn)處的索引蒲肋。
    int lastIndexOf(string,int fromIndex); // 從指定的索引開(kāi)始反向搜索
  5. 獲取子串蘑拯。
    string substring(start); // 返回 start 到結(jié)尾的子串
    string substring(start,end); // 返回 start 至 end-1 的子串
  6. 反轉(zhuǎn)。
    StringBuffer reverse(); // 字符串反轉(zhuǎn)
  7. 將緩沖區(qū)中指定數(shù)據(jù)存儲(chǔ)到指定字符數(shù)組中兜粘。
    void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin);

StringBuilder 類(lèi)

該類(lèi)被設(shè)計(jì)用作 StringBuffer 的一個(gè)簡(jiǎn)易替換强胰。

StringBuffer 和 StringBuilder 的區(qū)別:

    • StringBuffer 線(xiàn)程安全。
  • StringBuilder 線(xiàn)程不安全妹沙。
    • 單線(xiàn)程操作偶洋,使用 StringBuilder 效率高。
  • 多線(xiàn)程操作距糖,使用 StringBuffer 安全玄窝。

StringBuilder 和StringBuffer ,它們基本相似悍引,不同之處恩脂,StringBuffer 是線(xiàn)程安全的,而 StringBuilder 則沒(méi)有實(shí)現(xiàn)線(xiàn)程安全功能趣斤,所以性能略高俩块。

因此一般情況下,如果需要?jiǎng)?chuàng)建一個(gè)內(nèi)容可變的字符串對(duì)象,應(yīng)優(yōu)先考慮使用 StringBuilder 類(lèi)玉凯。

方法和 StringBuffer 一樣势腮;

  • 創(chuàng)建一個(gè) StringBuilder 對(duì)象,用來(lái)存儲(chǔ)字符串漫仆,并對(duì)其做了追加和插入操作捎拯。這些操作修改了 str 對(duì)象的值,而沒(méi)有創(chuàng)建新的對(duì)象盲厌,這就是 StringBuilder 和 String 最大的區(qū)別署照。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市吗浩,隨后出現(xiàn)的幾起案子建芙,更是在濱河造成了極大的恐慌,老刑警劉巖懂扼,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件岁钓,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡微王,警方通過(guò)查閱死者的電腦和手機(jī)屡限,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)炕倘,“玉大人钧大,你說(shuō)我怎么就攤上這事≌中” “怎么了啊央?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)涨醋。 經(jīng)常有香客問(wèn)我瓜饥,道長(zhǎng),這世上最難降的妖魔是什么浴骂? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任乓土,我火速辦了婚禮,結(jié)果婚禮上溯警,老公的妹妹穿的比我還像新娘趣苏。我一直安慰自己,他們只是感情好梯轻,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布食磕。 她就那樣靜靜地躺著,像睡著了一般喳挑。 火紅的嫁衣襯著肌膚如雪彬伦。 梳的紋絲不亂的頭發(fā)上滔悉,一...
    開(kāi)封第一講書(shū)人閱讀 51,292評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音单绑,去河邊找鬼回官。 笑死,一個(gè)胖子當(dāng)著我的面吹牛询张,可吹牛的內(nèi)容都是我干的孙乖。 我是一名探鬼主播浙炼,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼份氧,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了弯屈?” 一聲冷哼從身側(cè)響起蜗帜,我...
    開(kāi)封第一講書(shū)人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎资厉,沒(méi)想到半個(gè)月后厅缺,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡宴偿,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年湘捎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片窄刘。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡窥妇,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出娩践,到底是詐尸還是另有隱情活翩,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布翻伺,位于F島的核電站材泄,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏吨岭。R本人自食惡果不足惜拉宗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望辣辫。 院中可真熱鬧簿废,春花似錦、人聲如沸络它。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)化戳。三九已至单料,卻和暖如春埋凯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背扫尖。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工白对, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人换怖。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓甩恼,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親沉颂。 傳聞我的和親對(duì)象是個(gè)殘疾皇子条摸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • [TOC] StringBuffer類(lèi) StringBuffer類(lèi)概述及其構(gòu)造方法 StringBuffer類(lèi)概述...
    lutianfei閱讀 466評(píng)論 0 1
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類(lèi)相關(guān)的語(yǔ)法铸屉,內(nèi)部類(lèi)的語(yǔ)法钉蒲,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法彻坛,線(xiàn)程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,625評(píng)論 18 399
  • String String類(lèi)直接繼承自O(shè)bject顷啼,內(nèi)部包含一個(gè)char數(shù)組,用于存放字符數(shù)據(jù) String對(duì)象是...
    LilacZiyun閱讀 380評(píng)論 0 5
  • java筆記第一天 == 和 equals ==比較的比較的是兩個(gè)變量的值是否相等昌屉,對(duì)于引用型變量表示的是兩個(gè)變量...
    jmychou閱讀 1,497評(píng)論 0 3
  • java中String的常用方法 1钙蒙、length()字符串的長(zhǎng)度 例:char chars[]={'a','b'...
    赤赤有名閱讀 2,052評(píng)論 0 10