官术网_书友最值得收藏!

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中,再比較兩個字符串,如果相等則是回文字符串。

主站蜘蛛池模板: 江安县| 安溪县| 崇阳县| 岚皋县| 门头沟区| 沙田区| 新民市| 深水埗区| 日照市| 秦皇岛市| 大姚县| 玉山县| 嵊州市| 德令哈市| 长岛县| 沙田区| 平罗县| 汪清县| 水城县| 新丰县| 溧水县| 万年县| 湄潭县| 临潭县| 鄢陵县| 手游| 若尔盖县| 九江县| 成安县| 平度市| 富源县| 麟游县| 平罗县| 东丰县| 阿拉善右旗| 武宁县| 磴口县| 漾濞| 准格尔旗| 衡东县| 醴陵市|