Java 語言的文字資料被儲存為字元或字串型別。字元及字串的操作主要用到 String 類和 StringBuffer 類,如連線、修改、替換、比較和查詢等。
定義字串
直接定義字串
直接定義字串是指使用雙引號表示字串中的內容,例如"Hello Java"、"Java 程式設計"等
String helloWorld ="Hello World";
使用 String 類定義
在 Java 中每個雙引號定義的字串都是一個 String 類的物件。因此,可以通過使用 String 類的構造方法來建立字串,該類位於 java.lang 包中。
String helloWorld =new String("Hello World");
字串的連線
通過字串連線,可以將兩個或多個字串、字元、整數和浮點數等型別的資料連成一個更大的字串。
使用連線運算子
“+”運算子是最簡單、最快捷,也是使用最多的字串連線方式。在使用“+”運算子連線字串和 int 型(或 double 型)資料時,“+”將 int(或 double)型資料自動轉換成 String 型別。
int i=10;
String helloWorld="Hello World 第"+i+"次出現在文章中";
使用 concat() 方法
String 類的 concat() 方法實現了將一個字串連線到另一個字串的後面。
String hello = "Hello";
String world = "World";
String helloWorld = hello.concat(world);
獲取字串長度
使用 String 類的 length() 方法
String hello = "Hello World";
System.out.println(hello.length());//輸出11
轉換大小寫
toLowerCase() 方法可以將字串中的所有字元全部轉換成小寫,toUpperCase() 則將字串中的所有字元全部轉換成大寫,非字母的字元不受影響。
String helloWorld="Hello World";
System.out.println(helloWorld.toLowerCase()); //輸出:helloworld
System.out.println(helloWorld.toUpperCase()); //輸出:HELLOWORLD
去除空格
使用 String 類提供的 trim() 方法去掉首尾空格
String hello=" hello ";
System.out.println(hello.trim());//去掉首尾空格後hello
字串擷取
String 類的 substring() 方法用於對字串進行提取,該方法主要有兩種過載形式。
substring(int beginIndex)
從索引位置開始至結尾處的字串部分。呼叫時,括號中是需要提取字串的開始位置,方法的返回值是提取的字串。
String helloWorld="Hello World";
String world=helloWorld.substring(6);
System.out.println(world); //輸出:World
substring(int beginIndex,int endIndex)
beginIndex 表示擷取的起始索引,擷取的字串中包括起始索引對應的字元;endIndex 表示結束索引,擷取的字串中不包括結束索引對應的字元,對於開始位置 beginIndex, Java 是基於字串的首字元索引為 0 處理的,但是對於結束位置 endIndex,Java 是基於字串的首字元索引為 1 來處理的
String helloWorld="Hello World";
System.out.println(helloWorld.substring(2,10));//輸出 llo Worl
分割字串
String 類的 split() 方法可以按指定的分割符對目標字串進行分割,分割後的內容存放在字串陣列中。str.split(String sign)與str.split(String sign,int limit),str 為需要分割的目標字串;sign 為指定的分割符,可以是任意字串;limit 表示分割後生成的字串的限制個數,如果不指定,則表示不限制,直到將整個目標字串完全分割為止。
String color="Red,Black,White,Yellow";
String[] arr1=color.split(",");//不限制元素個數
//arr1為
//Red
//Black
//White
//Yellow
String[] arr2=Colors.split(",",3); //限制元素個數為3
//arr2為
//Red
//Black
//White,Yellow
字串的替換
String 類提供了 3 種字串替換方法,分別是 replace()、replaceFirst() 和 replaceAll()
replace()
replace(String oldChar, String newChar) 方法用於將目標字串中的指定字元(串)替換成新的字元(串)
String helloWorld="Hello Java";
System.out.println(words.replace("Java","World"));//輸出Hello World
replaceFirst()
replaceFirst(String regex, String replacement) 方法用於將目標字串中匹配某正規表示式的第一個子字串替換成新的字串
String words="hello java,hello php";
System.out.println(words.replaceFirst("hello","你好 ")); //輸出:你好 java,hello php
replaceAll()
replaceAll(String regex, String replacement) 方法用於將目標字串中匹配某正規表示式的所有子字串替換成新的字串
String words="hello java,hello php";
System.out.println(words.replaceAll("hello","你好 ")); //輸出:你好 java,你好 php
字串的比較
比較字串的常用方法有 3 個:equals() 方法、equalsIgnoreCase() 方法、 compareTo() 方法
equals()
equals() 方法將逐個地比較兩個字串的每個字元是否相同。對於字元的大小寫,也在檢查的範圍之內。
String a="a";
String b="b";
System.out.println(a.equals(b)); //輸出 false
equalsIgnoreCase()
equalsIgnoreCase() 方法的作用和語法與 equals() 方法完全相同,唯一不同的是 equalsIgnoreCase() 比較時不區分大小寫
String a="ab";
String b="AB";
System.out.println(a.equals(b)); //輸出 true
compareTo()
compareTo() 方法用於按字典順序比較兩個字串的大小,該比較是基於字串各個字元的 Unicode 值。
String upperA="A";
String lowerA="a";
System.out.println(upperA.compareTo(lowerA)); //輸出為-32
查詢字串
字串查詢分為兩種形式:一種是在字串中獲取匹配字元(串)的索引值,另一種是在字串中獲取指定索引位置的字元。分別有三個方法indexOf()、lastlndexOf()和charAt()
indexOf()
indexOf() 方法用於返回字元(串)在指 定字串中首次出現的索引位置,如果能找到,則返回索引值,否則返回 -1。
str.indexOf(value)
str.indexOf(value,int fromIndex)
str 表示指定字串;value 表示待查詢的字元(串);fromIndex 表示查詢時的起始索引,如果不指定 fromIndex,則預設從指定字串中的開始位置(即 fromIndex 預設為 0)開始查詢。
String helloWorld="Hello Java";
int size=s.indexOf('v'); //size的結果為8
lastlndexOf()
lastIndexOf() 方法用於返回字元(串)在指定字串中最後一次出現的索引位置,如果能找到則返回索引值,否則返回 -1。
str.lastIndexOf(value)
str.lastlndexOf(value, int fromIndex)
lastIndexOf() 方法的查詢策略是從右往左查詢,如果不指定起始索引,則預設從字串的末尾開始查詢。
String words="today,monday,Sunday";
System.out.println(words.lastIndexOf("day"));//輸出16
charAt()
charAt() 方法可以在字串內根據指定的索引查詢字元
String words="today,monday,sunday";
System.out.println(words.charAt(0)); //結果:t
StringBuffer類
除了通過 String 類建立和處理字串之外,還可以使用 StringBuffer 類來處理字串。StringBuffer 類可以比 String 類更高效地處理字串。StringBuffer 類是可變字串類,建立 StringBuffer 類的物件後可以隨意修改字串的內容。每個 StringBuffer 類的物件都能夠儲存指定容量的字串,如果字串的長度超過了 StringBuffer 類物件的容量,則該物件的容量會自動擴大。
建立 StringBuffer
StringBuffer 類提供了 3 個構造方法來建立一個字串
StringBuffer() 構造一個空的字串緩衝區,並且初始化為 16 個字元的容量。
StringBuffer(int length) 建立一個空的字串緩衝區,並且初始化為指定長度 length 的容量。
StringBuffer(String str) 建立一個字串緩衝區,並將其內容初始化為指定的字串內容 str,字串緩衝區的初始容量為 16 加上字串 str 的長度。
StringBuffer str1=new StringBuffer();//定義一個空的字串緩衝區,含有16個字元的容量
StringBuffer str2=new StringBuffer(10);//定義一個含有10個字元容量的字串緩衝區
StringBuffer str3=new StringBuffer("HelloWorld");//定義一個含有(16+4)的字串緩衝區,"HelloWorld"為10個字元
追加字串
StringBuffer 類的 append() 方法用於向原有 StringBuffer 物件中追加字串。追加內容到當前 StringBuffer 物件的末尾,類似於字串的連線。
StringBuffer buffer=new StringBuffer("hello,"); //建立一個 StringBuffer 物件
String str="World!";
buffer.append(str); //向 StringBuffer 物件追加 str 字串
System.out.println(buffer.substring(0)); //輸出:Hello,World!
替換字元
StringBuffer 類的 setCharAt() 方法用於在字串的指定索引位置替換一個字元。StringBuffer 物件.setCharAt(int index, char ch);
StringBuffer sb=new StringBuffer(“hello");
sb.setCharAt(1,'E');
System.out.println(sb); //輸出:hEllo
反轉字串
StringBuffer 類中的 reverse() 方法用於將字串序列用其反轉的形式取代。StringBuffer 物件.reverse();
StringBuffer sb=new StringBuffer("java");
sb.reverse();
System.out.println(sb); //輸出:avaj
刪除字串
StringBuffer 類提供了 deleteCharAt() 和 delete() 兩個刪除字串的方法
deleteCharAt()
deleteCharAt() 方法用於移除序列中指定位置的字元,StringBuffer 物件.deleteCharAt(int index);
StringBuffer sb=new StringBuffer("She");
sb.deleteCharAt(2);
System.out.println(sb); //輸出:Se
delete()
delete() 方法用於移除序列中子字串的字元,StringBuffer 物件.delete(int start,int end);start 表示要刪除字元的起始索引值(包括索引值所對應的字元),end 表示要刪除字串的結束索引值(不包括索引值所對應的字元)。
StringBuffer sb=new StringBuffer("hello jack");
sb.delete(2,5);
System.out.println(sb); //輸出:he jack