在本教程中,我們將借助示例學習Java String,如何創(chuàng)建它及其各種方法。
在Java中,字符串是一系列字符。例如,“hello”是一個包含字符序列“h”、“e”、“l(fā)”、“l(fā)”和“o”的字符串。
與其他編程語言不同,Java中的字符串不是基本類型(比如int、char等)。相反,所有字符串都是預定義的名為String的類的對象。例如,
//創(chuàng)建一個字符串 String type = "java programming";
在這里,我們創(chuàng)建了一個名為type的字符串。在這里,我們使用"java programming"初始化了字符串。在Java中,我們使用雙引號表示字符串。
該字符串是String類的實例。
注意:所有字符串變量都是String類的實例。
Java String提供了各種方法,使我們可以執(zhí)行不同的字符串操作。以下是一些常用的字符串方法。
方法 | 描述 |
---|---|
concat() | 將兩個字符串連接在一起 |
equals() | 比較兩個字符串的值 |
charAt() | 返回存在于指定位置的字符 |
getBytes() | 將字符串轉換為字節(jié)數(shù)組 |
indexOf() | 返回字符串中指定字符的位置 |
length() | 返回指定字符串的大小 |
replace() | 將指定的舊字符替換為指定的新字符 |
substring() | 返回字符串的子字符串 |
split() | 將字符串分成字符串數(shù)組 |
toLowerCase() | 將字符串轉換為小寫 |
toUpperCase() | 將字符串轉換為大寫 |
valueOf() | 返回指定數(shù)據(jù)的字符串表示形式 |
讓我們舉幾個實例。
class Main { public static void main(String[] args) { //創(chuàng)建字符串 String greet = "Hello! World"; System.out.println("字符串是: " + greet); //checks the string length System.out.println("字符串的長度: " + greet.length()); } }
輸出結果
字符串是: Hello! World 字符串的長度: 12
在上面的示例中,我們創(chuàng)建了一個名為greet的字符串。在這里,我們使用了length()方法來獲取字符串的大小。
class Main { public static void main(String[] args) { //創(chuàng)建字符串 String greet = "Hello! "; System.out.println("第一個字符串: " + greet); String name = "World"; System.out.println("第二個字符串: " + name); //連接兩個字符串 String joinedString = greet.concat(name); System.out.println("連接后的字符串: " + joinedString); } }
輸出結果
第一個字符串: Hello! 第二個字符串: World 連接后的字符串: Hello! World
在上面的示例中,我們創(chuàng)建了2個名為greet和name的字符串。
在這里,我們使用了concat()方法來連接字符串。因此,我們得到一個名為joinedString的新字符串。
在Java中,我們還可以使用 + 運算符來連接兩個字符串。
class Main { public static void main(String[] args) { //創(chuàng)建字符串 String greet = "Hello! "; System.out.println("第一個字符串: " + greet); String name = "World"; System.out.println("第二個字符串: " + name); //連接兩個字符串 String joinedString = greet + name; System.out.println("連接后的字符串: " + joinedString); } }
輸出結果
第一個字符串: Hello! 第二個字符串: World 連接后的字符串: Hello! World
在這里,我們使用了+運算符來連接兩個字符串。
class Main { public static void main(String[] args) { //創(chuàng)建字符串s String first = "java programming"; String second = "java programming"; String third = "python programming"; //比較第一個字符串和第二個字符串 boolean result1 = first.equals(second); System.out.println("第一和第二個字符串相等: " + result1); //比較第一個和第三個字符串 boolean result2 = first.equals(third); System.out.println("第一和第三個字符串相等: " + result2); } }
輸出結果
第一和第二個字符串相等: true 第一和第三個字符串相等: false
在上面的示例中,我們使用了equals()方法來比較兩個字符串的值。
如果兩個字符串相同,則該方法返回true,否則返回false。
注意:我們還可以使用 == 運算符 和 compareTo()方法比較2個字符串。
class Main { public static void main(String[] args) { //創(chuàng)建字符串 using the string literal String greet = "Hello! World"; System.out.println("字符串是: " + greet); //返回位置3處的字符 System.out.println("位置3處的字符: " + greet.charAt(3)); //返回位置7處的字符 System.out.println("位置7處的字符: " + greet.charAt(7)); } }
輸出結果
字符串是: Hello! World 位置3處的字符: l 位置7處的字符: W
在上面的示例中,我們使用了charAt()方法從指定位置訪問字符。
class Main { public static void main(String[] args) { //創(chuàng)建字符串 using the new keyword String example = new String("Hello! World"); //返回子字符串World System.out.println("使用 subString(): " + example.substring(7)); //將字符串轉換為小寫 System.out.println("使用 toLowerCase(): " + example.toLowerCase()); //將字符串轉換為大寫 System.out.println("使用 toUpperCase(): " + example.toUpperCase()); //替換字符'!”為“o” System.out.println("使用 replace(): " + example.replace('!', 'o')); } }
輸出結果
使用 subString(): World 使用 toLowerCase(): hello! world 使用 toUpperCase(): HELLO! WORLD 使用 replace(): Helloo World
在上面的示例中,我們使用new關鍵字創(chuàng)建了一個命名為example的字符串。
這里,
substring() 方法返回字符串World
toLowerCase() 方法將字符串轉換為小寫
toUpperCase() 方法將字符串轉換為大寫
replace() 方法替換字符'!'為'o'。
Java中的字符串用雙引號表示。例如,
//創(chuàng)建字符串 String example = "This is a string";
現(xiàn)在,如果我們想在字符串中包含雙引號。例如,
//字符串包含雙引號 String example = "This is the "String" class";
這將導致錯誤。這是因為使用雙引號來表示字符串。因此,編譯器會將其"This is the "視為字符串。
為了解決此問題,在Java中使用了轉義字符(\)?,F(xiàn)在我們可以在字符串中包含雙引號,如下所示:
//使用轉義字符 String example = "This is the \"String\" class.";
轉義字符告訴編譯器轉義雙引號并讀取整個文本。
在Java中,創(chuàng)建字符串意味著創(chuàng)建string類的對象。創(chuàng)建字符串時,無法在Java中更改該字符串。這就是為什么在Java中將字符串稱為不可變的原因。
為了更深入地理解它,讓我們看一個示例:
//創(chuàng)建字符串 String example = "Hello!";
在這里,我們創(chuàng)建了一個字符串對象"Hello!"。創(chuàng)建之后,我們將無法更改它。
現(xiàn)在假設我們要更改字符串。
//向該字符串添加另一個字符串 example = example.concat(" World");
在這里,我們嘗試將新的字符串添加到先前的字符串。
由于字符串是不可變的,它應該會導致錯誤。但是這樣做很好。
現(xiàn)在看來我們可以更改字符串了。但是,事實并非如此。讓我們看看這里實際發(fā)生了什么。
我們有一個字符串"Hello!",由名為example的變量引用?,F(xiàn)在,在執(zhí)行上面的代碼時,
JVM接受字符串 "Hello!"
將字符串" World" 追加到它
這將創(chuàng)建一個新字符串 "Hello! World"
變量example現(xiàn)在指向新字符串
前一個字符串"Hello!"保持不變
注意:每次創(chuàng)建新字符串并由變量引用它時。
到目前為止,我們已經(jīng)在Java中創(chuàng)建了類似于基本類型的字符串。但是,由于Java中的字符串是對象,因此我們也可以使用new關鍵字進行創(chuàng)建。例如,
//創(chuàng)建字符串使用new關鍵字 String name = new String("java string");
在上面的示例中,我們使用了new關鍵字和構造函數(shù)String()來創(chuàng)建一個字符串。
String類提供各種其他構造函數(shù)創(chuàng)建的字符串。
現(xiàn)在,讓我們看看創(chuàng)建字符串的過程與上一個過程有何不同。
現(xiàn)在我們知道了如何使用字符串字面量和new關鍵字創(chuàng)建字符串,讓我們看看它們之間的主要區(qū)別是什么。
在Java中,JVM維護一個字符串池來將其所有字符串存儲在內存中。字符串池有助于重用字符串。
使用字符串文字創(chuàng)建字符串時,直接提供字符串的值。因此,編譯器首先檢查字符串池,看看字符串是否已經(jīng)存在。
如果字符串已經(jīng)存在, 不會創(chuàng)建新字符串。相反,新引用指向現(xiàn)有字符串。
如果字符串不存在,則創(chuàng)建新字符串。
但是,在使用new關鍵字創(chuàng)建字符串時,不會直接提供字符串的值。因此,新字符串總是被創(chuàng)建。