- Java程序設計基礎(第6版)
- 陳國君主編
- 1659字
- 2019-07-01 10:11:08
5.5 字符串
字符串就是一系列字符的序列。在Java語言中字符串是用一對雙引號("")括起來的字符序列,在前幾章的例子中已多次用到,如“你好”、"Hello"等。字符串也是編程中經常要使用的數據結構,從某種程度上說字符串有些類似于字符數組。在Java語言中無論是字符串常量還是字符串變量,都是用類來實現的。程序中用到的字符串可以分為兩大類:一類是創建之后不會再做修改和變動的字符串變量;另一類是創建之后允許再做修改的字符串變量。對于前一種字符串變量,由于程序中經常需要對它做比較、搜索之類的操作,所以通常把它放在一個具有一定名稱的對象之中,由程序完成對該對象的上述操作,在Java程序中存放這種字符串的變量是String類對象;對于后一種字符串變量,由于程序中經常需要對它做添加、插入、修改之類的操作,所以這種字符串變量一般都存放在StringBuilder類的對象之中。本書只討論String類型的串變量。
5.5.1 字符串變量的創建
首先再強調一下字符串常量與字符常量的不同,字符常量是用單引號(')括起來的單個字符,而字符串常量是用雙引號(")括起來的字符序列。
聲明字符串變量的格式與其他變量一樣,分為對象的聲明與對象創建兩步,這兩步可以分成兩個獨立的語句,也可以在一個語句中完成。
格式一:
String變量名; 變量名=new String("字符串");
如:
String s; //聲明字符串型引用變量s,此時s的值為null s=new String("Hello"); //在堆內存中分配空間,并將s指向該字符串首地址
第一個語句只聲明了字符串引用變量s,此時s的值為null;第二個語句則在堆內存中分配了內存空間,并將s指向了字符串的首地址。
上述的兩個語句也可以合并成一個語句。其格式如下。
格式二:
String變量名=new String(“字符串”);
如:
String s=new String("Hello");
還有一種非常特殊而常用的創建String對象的方法,這種方法就是直接利用雙引號括起來的字符串為新建的String對象賦值,即在聲明字符串變量時直接初始化。
格式三:
String變量名="字符串";
如:
String s="Hello";
由于字符串是引用型變量,所以其存儲方式與數組的存儲方式基本相同。
程序中可以用賦值運算符為字符串變量賦值,除此之外,Java語言定義“+”運算符可用于兩個字符串的連接操作(關于字符串的運算符在3.7.7中已講述過)。例如:
str="Hello"+"Java"; //str的值為"HelloJava"
如果字符串與其他類型的變量進行“+”運算,系統自動將其他類型的數據轉換為字符串型。例如:
int i=10; String s="i="+i; //s的值為"i=10"
前面說過,利用String類創建的字符串變量,一旦被初始化或賦值,它的值和所分配的內存內容就不可再改變。如果硬要改變它的值,它會產生一個新的字符串。例如:
String str1="Java"; str1=str1+"Good";
這看起來像是一個簡單的字符串重新賦值,實際上在程序的解釋過程中卻不是這樣的。程序首先產生str1的一個字符串對象并在內存中申請了一段空間,由于發現又需要重新賦值,在原來的空間已經不可能再追加新的內容,系統不得不將這個對象放棄,再重新生成第二個新的對象str1并重新申請一個新的內存空間。雖然str1指向的內存地址(句柄)是同一個,但對象已經不再是同一個了。
5.5.2 String類的常用方法
Java語言為String類定義了許多方法。可以通過下述格式調用Java語言定義的方法:
字符串變量名.方法名();
表5.2列出了String類的常用方法。
表5.2 String類的常用方法

【例5.6】 判斷回文字符串。
回文是一種“從前往后讀”和“從后往前讀”都相同的字符串,例如,"rotor"就是一個回文字符串。在本例中使用兩種算法來判斷回文字符串。
程序中比較兩個字符時,使用關系運算符“==”,而比較兩個字符串時,需使用equals()方法。程序代碼如下:

該程序運行時可以帶命令行參數。若在命令行方式下輸入java App5_6 hello,則程序的運行結果如下:
sChar=h eChar=o 算法1:false temp=olleh 算法2:false
該程序的第9行用于判斷是否帶命令行參數,在執行程序時,若帶有參數,則第一個參數args[0]賦值給字符串變量str,否則,將str仍取程序中設定的值"rotor";第14~24行是算法1,分別從前向后和從后向前依次獲得源串str的一個字符sChar和eChar,比較sChar和eChar,如果不相等,則str肯定不是回文字符串,所以yn=false,立即退出循環;否則,繼續比較,直到str的所有字符全部比較完,若yn值仍為true,才能肯定str是回文字符串;第25~32行是算法2,將源串str反轉存入字符串變量temp中,再比較兩個字符串,如果相等則是回文字符串。
- Python快樂編程:人工智能深度學習基礎
- SQL Server 2016從入門到精通(視頻教學超值版)
- C語言程序設計
- YARN Essentials
- 區塊鏈技術與應用
- 0 bug:C/C++商用工程之道
- Xcode 6 Essentials
- jQuery技術內幕:深入解析jQuery架構設計與實現原理
- Spring Web Services 2 Cookbook
- 算法訓練營:海量圖解+競賽刷題(入門篇)
- 數據結構與算法詳解
- Tkinter GUI Programming by Example
- Web程序設計與架構
- Mastering Android Application Development
- 架構師應該知道的37件事