Java讀書筆記三(字串)

來源:互聯網
上載者:User

標籤:

 

 1.介紹

本篇部落格將對JAVA中的字串類的基本知識進行介紹,主要字串類的一些常用方法等內容。


 2.字串對象的建立

1.有兩種形式,但是在開發中經常習慣於String 變數名的形式來進行操作。

<span style="font-family:SimSun;font-size:18px;">package com.String;public class Sample13_1 {public static void main(String args[]){//使用簡單文法建立字串對象String s1=" Java核心技術大全歡迎您!!";//使用構造器建立字串對象String s2=new String("恭喜你分別用兩種不同的文法建立了字串!!");//建立Null 字元串對象String s3="";//字串引用s4的值為nullString s4=null;//列印內容System.out.println(s1+"#"+s2+"#"+s3+"#"+s4);}}</span>


2.String類的一些重要的方法

String作為一個對象的身份出現,肯定少不了一些操作字串的方法,常用的方法匯總如下。

<span style="font-family:SimSun;font-size:18px;">package com.String;public class Sample13_3 {public static void main(String args[]) {String s1 = "JavaSE6.0核心技術大全歡迎您!!";String s2 = new String("恭喜你分別用兩種不同的文法建立了字串!!");String s3;// 使用charAt方法擷取字串中某個字元System.out.println("=====================charAt=======================");char c = s1.charAt(4);System.out.println("從0開始數,字串s1中第4個字元為:" + c);// 使用toCharArray方法將字串轉換為字元數組System.out.println("=====================toCharArray==================");char[] array = s1.toCharArray();System.out.print("將char數組倒著列印:");for (int i = array.length - 1; i >= 0; i--)System.out.print(array[i]);// 使用concat方法串連兩個字串System.out.println("\n=====================concat=======================");s3 = s1.concat(s2);System.out.println("將兩個字串串連後的結果為:" + s3);// 使用equals方法比較兩個字串的內容System.out.println("=====================equals=======================");s3 = "JavaSE6.0核心技術大全歡迎您!!";if (s1.equals(s3))System.out.println("恭喜你測試成功,s1與s3中的內容是完全相同的!!");// 使用equalsIgnoreCase方法在不區分大小寫情況下比較兩個字串的內容System.out.println("=================equalsIgnoreCase=================");s3 = "JAVASE6.0核心技術大全歡迎您!!";if (s1.equalsIgnoreCase(s3))System.out.println("s1與s3中的內容在不區分大小寫情況下是相同的!!");// 使用length方法擷取字串的長度System.out.println("======================length======================");int size = s1.length();System.out.println("s1中字元的個數為:" + size);// 使用replace方法替換字串中某個字元System.out.println("======================replace=====================");s3 = s1.replace('a', 'X');System.out.println("將s1中所有的字母a換成字母X:" + s3);// 使用substring方法擷取字串的某個子串System.out.println("======================substring===================");s3 = s1.substring(10);System.out.println("從0開始數,s1中第10個字元往後字串為:" + s3);s3 = s1.substring(2, 10);System.out.println("從0開始數,s1中第2個字元到第10個字元的字串為:" + s3);// 使用toLowerCase方法將字串的字元全換成小寫System.out.println("======================toLowerCase=================");s3 = s1.toLowerCase();System.out.println("將s1中的字元全換成小寫:" + s3);// 使用toUpperCase方法將字串的字元全換成大寫System.out.println("======================toUpperCase=================");s3 = s1.toUpperCase();System.out.println("將s1中的字元全換成大寫:" + s3);// 使用trim方法去掉字串頭部和尾部的不可見字元System.out.println("======================trim========================");s3 = "          Java SE6.0        ";System.out.println("s3沒有用過trim方法前:[" + s3 + "]");s3 = s3.trim();System.out.println("s3用過trim方法後:[" + s3 + "]");}}</span>


3.String對象的記憶體機制

String對象有“一次投入,終身回報”的好處,下面先來分析一段代碼

<span style="font-family:SimSun;font-size:18px;">package com.String;public class Sample13_4 {public static void main(String args[]) {// 使用簡單文法建立字串s1與s2String s1 = "JavaSE6.0";String s2 = "JavaSE6.0";// 使用構造器建立字串s3String s3 = new String("JavaSE6.0");// 使用==比較字串s1與s2if (s1 == s2) {System.out.println("字串s1與字串s2通過等於測試,結果返回true");} else {System.out.println("字串s1與字串s2沒有通過等於測試,結果返回false");}// 使用==比較字串s1與s3if (s1 == s3) {System.out.println("字串s1與字串s3通過等於測試,結果返回true");} else {System.out.println("字串s1與字串s3沒有通過等於測試,結果返回false");}// 使用equals方法比較字串s1與s3if (s1.equals(s3)) {System.out.println("字串s1與字串s3內容相同,結果返回true");} else {System.out.println("字串s1與字串s3內容不同,結果返回false");}}}</span>


如果允許上述執行個體的話,會出現意想不到的結果,下面來簡單的分析下String的記憶體機制.

JVM在運行時,將記憶體分為兩個部分,一個是堆;一個是棧;堆中放置的是對象;棧中放置的是對象的引用或局部變數。java在記憶體設計時,又在堆中開闢了一個很小的記憶體,稱為字串常量池,用來存放特定的字串對象。

當使用String s1=“xxxx”建立時,會首先查看常量池中是否已經包含,如果有的話,直接將引用指向即可。



所以運行上述執行個體的時候,就不會驚訝了。通過這樣設計在建立的時候就已經把字串給比較了,以後比較中只需比較兩個引用是否指向的是同一個對象即可。需要注意的是採用new建立的字串對象,會直接在堆上建立出字串對象,沒有此效果。


 3.StringBuffer類

上面介紹了String類,但是也有不足之處,如果在用String類進行字串拼接的話,記憶體消耗將會很大,因此為了彌補String的不足,StringBuffer出現了。通過StringBuffer在拼接字串時,不會產生中間對象,因此當需要對字串做大量串連時,應該使用StringBuffer類

StringBuffer類的常用方法如下

<span style="font-family:SimSun;font-size:18px;">package com.String;public class Sample13_10 {public static void main(String[] args) {StringBuffer sb1 = new StringBuffer("Java6.0");System.out.println("操作之前對象sb1的內容為:" + sb1);// 對sb1進行一系列操作sb1.append("核心技術大全").insert(4, "SE").delete(9, 15).reverse();System.out.println("一系列操作之後對象sb1的內容為:" + sb1);// 建立內容與sb1相同的StringBuffer對象sb2StringBuffer sb2 = new StringBuffer(sb1.toString());// 使用StringBuffer的equals方法測試System.out.println("====使用StringBuffer的equals方法測試對象sb1與sb2的內容====");if (sb1.equals(sb2)) {System.out.println("對象sb1與sb2的內容相同!!!");} else {System.out.println("對象sb1與sb2的內容不相同!!!");}// 使用toString方法後使用equals方法測試System.out.println("====使用toString方法後使用equals方法測試對象sb1與sb2的內容====");String s1 = sb1.toString();String s2 = sb2.toString();if (s1.equals(s2)) {System.out.println("對象sb1與sb2的內容相同!!");} else {System.out.println("對象sb1與sb2的內容不相同!!");}}}</span>


 4.StringBuilder類

StringBuilder類與StringBuffer類用法類似,都可以來做大量字串的拼接操作。


 5.StringBuilder與StringBuffer的區別

1.首先StringBuilder的執行效率要比StringBuffer類高一些,但是StringBuilder類的字串編輯方法沒有進行同步,在多線程時會產生問題。

2.StringBuffer在多線程時,不會產生問題,因為對字串的編輯進行了同步



著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

Java讀書筆記三(字串)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.