Java程式設計基礎(8)
Java基礎知識: Java字串的處理(3)
11.Java查詢字串(indexOf()、lastlndexOf()和charAt())
字串查詢分為兩種形式:一種是在字串中獲取匹配字元(串)的索引值,另一種是在字串中獲取指定索引位置的字元。
根據字元查詢
String 類的 indexOf() 方法和 lastlndexOf() 方法用於在字串中獲取匹配字元(串)的索引值。
1. indexOf() 方法
indexOf() 方法用於返回字元(串)在指 定字串中首次出現的索引位置,如果能找到,則返回索引值,否則返回 -1。該方法主要有兩種過載形式:
str.indexOf(value)
str.indexOf(value,intfromIndex)
其中,str 表示指定字串;value 表示待查詢的字元(串);fromIndex 表示查詢時的起始索引,如果不指定 fromIndex,則預設從指定字串中的開始位置(即 fromIndex 預設為 0)開始查詢。
例如,下列程式碼在字串"Hello
Java”中查詢字母 v 的索引位置。
String s="Hello Java";
intsize=s.indexOf('v');//size的結果為8
上述程式碼執行後 size 的結果為 8,它的查詢過程如圖 1 所示。

圖1 indexOf() 方法查詢字元過程
簡單的 Java 程式,演示 indexOf() 方法查詢字串的用法:如下

2. lastlndexOf() 方法
lastIndexOf() 方法用於返回字元(串)在指定字串中最後一次出現的索引位置,如果能找到則返回索引值,否則返回 -1。該方法也有兩種過載形式:
str.lastIndexOf(value)
str.lastlndexOf(value,intfromIndex)
注意:lastIndexOf() 方法的查詢策略是從右往左查詢,如果不指定起始索引,則預設從字串的末尾開始查詢。

根據索引查詢
String 類的 charAt() 方法可以在字串內根據指定的索引查詢字元,該方法的語法形式如下:
字串名.charAt(索引值)
charAt() 方法的使用示例如下:
String words="today,monday,sunday";
System.out.println(words.charAt(0));//結果:t
System.out.println(words.charAt(1));// 結果:o
System.out.println(words.charAt(8));// 結果:n
12.Java字串的加密解密
為了保證程式的安全,經常採用資料加密的方法。Java 中提供了專門用於加密運算的類和介面。
除了使用加密類和介面外,還可以通過多種方式實現字串的加密。其中常用的就是獲取字串的位元組陣列,之後對位元組陣列中的每個位元組都進行運算,得到新的內容,這時所獲得的字串與原字串將不相同,以此達到加密的效果;解密時再將加密字串進行相反的運算,這樣即可得到原字串。
本例項簡單介紹如何通過資料運算實現字串的加密和解密:

程式執行結果如下:

13. Java StringBuffer類詳解:追加、反轉、刪除字串及替換字串中的某個字元
在 Java 中,除了通過 String 類建立和處理字串之外,還可以使用 StringBuffer 類來處理字串。StringBuffer 類可以比 String 類更高效地處理字串。
因為 StringBuffer 類是可變字串類,建立 StringBuffer 類的物件後可以隨意修改字串的內容。每個 StringBuffer 類的物件都能夠儲存指定容量的字串,如果字串的長度超過了 StringBuffer 類物件的容量,則該物件的容量會自動擴大。
建立 StringBuffer 類
StringBuffer 類提供了 3 個構造方法來建立一個字串,如下所示:
StringBuffer() 構造一個空的字串緩衝區,並且初始化為 16 個字元的容量。
StringBuffer(int length) 建立一個空的字串緩衝區,並且初始化為指定長度 length 的容量。
StringBuffer(String str) 建立一個字串緩衝區,並將其內容初始化為指定的字串內容 str,字串緩衝區的初始容量為 16 加上字串 str 的長度。
使用 StringBuffer 類的建構函式的示例如下:
//定義一個空的字串緩衝區,含有16個字元的容量
StringBuffer str1=newStringBuffer();
//定義一個含有10個字元容量的字串緩衝區
StringBuffer str2=newStringBuffer(10);
//定義一個含有(16+4)的字串緩衝區,"青春無悔"為4個字元
StringBuffer str3=newStringBuffer("青春無悔");
/*
*輸出字串的容量大小
*capacity()方法返回字串的容量大小
*/
System.out.println(str1.capacity());//輸出 16
System.out.println(str2.capacity());//輸出 10
System.out.println(str3.capacity());//輸出 20
上述程式碼聲明瞭 3 個 StringBuffer 物件 str1、str2 和 str3,並分別對其進行初始化。str1.capacity() 用於檢視 str1 的容量,接著以同樣的方式對 str2 和 str3 進行容量檢視的操作。
追加字串
StringBuffer 類的 append() 方法用於向原有 StringBuffer 物件中追加字串。該方法的語法格式如下:
StringBuffer 物件.append(String str)
該方法的作用是追加內容到當前 StringBuffer 物件的末尾,類似於字串的連線。呼叫該方法以後,StringBuffer 物件的內容也發生了改變,例如:
StringBuffer buffer=newStringBuffer("hello,");//建立一個 StringBuffer 物件
String str="World!";
buffer.append(str);//向 StringBuffer 物件追加 str 字串
System.out.println(buffer.substring(0));//輸出:Hello,World!
每個新學期開始,學校都會針對本學期課程列出必修課程。編寫一個 Java 程式,要求使用者向控制檯迴圈錄入五門必修課程名稱,並將這五個名稱進行連線,最後輸出連線後的字串。程式碼如下:

程式執行結果為:

替換字元
StringBuffer 類的 setCharAt() 方法用於在字串的指定索引位置替換一個字元。該方法的語法格式如下:
StringBuffer 物件.setCharAt(int index, char ch);
該方法的作用是修改物件中索引值為 index 位置的字元為新的字元 ch,例如:
StringBuffer sb=newStringBuffer(“hello");
sb.setCharAt(1,'E');
System.out.println(sb); //輸出:hEllo
sb.setCharAt(0,'H');
System.out.println(sb); //輸出:HEllo
sb.setCharAt(2,'p');
System.out.println(sb); //輸出:HEplo
反轉字串
StringBuffer 類中的 reverse() 方法用於將字串序列用其反轉的形式取代。該方法的語法格式如下:
StringBuffer 物件.reverse();
使用 StringBuffer 類中的 reverse() 方法對字串進行反轉的示例如下:
StringBuffer sb=newStringBuffer("java");
sb.reverse();
System.out.println(sb);//輸出:avaj
刪除字串
StringBuffer 類提供了 deleteCharAt() 和 delete() 兩個刪除字串的方法,下面詳細介紹。
1. deleteCharAt() 方法
deleteCharAt() 方法用於移除序列中指定位置的字元,該方法的語法格式如下:
StringBuffer 物件.deleteCharAt(int index);
deleteCharAt() 方法的作用是刪除指定位置的字元,然後將剩餘的內容形成一個新的字串。例如:
StringBuffer sb=newStringBuffer("She");
sb.deleteCharAt(2);
System.out.println(sb);//輸出:Se
執行該段程式碼,將字串 sb 中索引值為 2 的字元刪除,剩餘的內容組成一個新的字串,因此物件 sb 的值為 Se。
2. delete() 方法
delete() 方法用於移除序列中子字串的字元,該方法的語法格式如下:
StringBuffer 物件.delete(int start,int end);
其中,start 表示要刪除字元的起始索引值(包括索引值所對應的字元),end 表示要刪除字串的結束索引值(不包括索引值所對應的字元)。該方法的作用是刪除指定區域以內的所有字元,例如:
StringBuffer sb=newStringBuffer("hello jack");
sb.delete(2,5);
System.out.println(sb);//輸出:he jack
sb.delete(2,5);
System.out.println(sb);//輸出:heck
執行該段程式碼,將字串"hello jack"索引值為 2(包括)到索引值為 5(不包括)之間的所有字元刪除,因此輸出的新的字串的值為"he jack"。
14.Java正則表示式
正則表示式是一種可以用於模式匹配和替換的規範,一個正則表示式就是由普通的字元(如字元 a~z)以及特殊字元(元字元)組成的文字模式,它用以描述在查詢文字主體時待匹配的一個或多個字串。
正則表示式作為一個模板,將某個字元模式與所搜尋的字串進行匹配。本文簡單瞭解一下如何使用正則表示式來操作字串。
元字元
正則表示式中含有一些具有特殊意義的字元,這些特殊字元稱為正則表示式的元字元。例如“\\d”表示 0~9 的任何一個數字,“\d”就是元字元。正則表示式中有多種元字元,常用的元字元如表 1 所示。
表1 正則表示式常用的元字元
元字元正則表示式的寫法說明
."."代表任意一個字元
\d"\\d"代表 0~9 的任何一個數字
\D"\\D"代表任何一個非數字字元
\s"\\s"代表空白字元,如"\t’’和’’\n”
\S"\\S"代表非空白字元
\W"\\W"代表不可用於識別符號的字元
\p {Lower}\\p {Lower}代表小寫字母 {a~z}
\p {Upper}\\p {Upper}代表大寫字母 {A~Z}
\p {ASCII}\\p {ASCII}ASCII 字元
\p {Alpha}\\p {Alpha}字母字元
\p {Digit}\\p {Digit}十進位制數字,即 [0~9]
\p {Alnum}\\p {Alnum}數字或字母字元
\p {Punct}\\p {Punct}標點符號:!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
\p {Graph}\\p {Graph}可見字元:[\p{Alnum}\p{Punct}]
\p {Print}\\p {Print}可列印字元:[\p{Graph}\x20]
\p {Blank}\\p {Blank}空格或製表符:[\t]
\p {Cntrl}\\p {Cntrl}控制字元:[\x00-\x1F\x7F]
在正則表示式中,可以使用方括號括起來若干個字元來表示一個元字元。這個元字元可以代表方括號中的任何一個字元,例如字串“reg="a4"” “reg="b4"”和“reg="c4"”都是與“reg="[abc]4"”匹配的字串。
注意:在正則表示式中,"."代表任何一個字元,因此如果想在正則表示式中使用普通意義的點字元,那麼必須使用轉義字元。
限定符
正則表示式中允許使用限定修飾符來限定元字元出現的次數,例如,“B*”表示 B 字母可以在字串中出現零次或多次。正則表示式中可以使用多種限定符,如表 2 所示。
表2 正則表示式常用的限定符
限定符?*+{n}{n,}{n,m}
說明零次或一次零次或多次一次或多次正好出現 n 次至少出現 n 次出現 n~m 次