# Java中String類字符串怎么用
## 一、String類概述
String類是Java語言中最常用的類之一,用于表示和操作字符串。在Java中,字符串是不可變的(immutable),這意味著一旦創建了一個String對象,它的值就不能被改變。任何看似修改字符串的操作,實際上都是創建了一個新的String對象。
### 1.1 String類的重要性
- 字符串處理是編程中最常見的操作之一
- Java中所有雙引號括起來的文本都是String類的實例
- String類提供了豐富的方法用于字符串操作
- 字符串在內存管理上有特殊處理(字符串常量池)
### 1.2 String類的不可變性
```java
String str = "hello";
str = str + " world"; // 實際上是創建了新對象
不可變性的優點: - 線程安全 - 可以緩存hash值 - 適合作為Map的key - 字符串常量池的實現基礎
String str1 = "Java"; // 使用字符串常量池
特點: - JVM會先檢查字符串常量池 - 如果存在則直接引用,否則創建新對象并放入池中 - 效率較高,推薦使用
String str2 = new String("Java"); // 強制創建新對象
特點: - 無論常量池是否存在,都會在堆中創建新對象 - 可能造成內存浪費 - 適用于需要明確新建對象的場景
String a = "abc";
String b = "abc";
String c = new String("abc");
String d = new String("abc");
System.out.println(a == b); // true
System.out.println(a == c); // false
System.out.println(c == d); // false
System.out.println(a.equals(c)); // true
String str = "Hello World";
// 獲取長度
int len = str.length(); // 11
// 獲取指定位置字符
char ch = str.charAt(1); // 'e'
// 獲取子字符串位置
int index1 = str.indexOf('o'); // 4
int index2 = str.indexOf("World"); // 6
int index3 = str.lastIndexOf('o'); // 7
String s1 = "Java";
String s2 = "java";
String s3 = "Java";
// 區分大小寫比較
boolean b1 = s1.equals(s2); // false
// 不區分大小寫比較
boolean b2 = s1.equalsIgnoreCase(s2); // true
// 比較引用地址
boolean b3 = (s1 == s3); // true (如果使用常量池)
// 字典序比較
int result = s1.compareTo(s2); // 負數(s1 < s2)
String original = " Java Programming ";
// 去除首尾空格
String trimmed = original.trim(); // "Java Programming"
// 轉換為大寫/小寫
String upper = original.toUpperCase(); // " JAVA PROGRAMMING "
String lower = original.toLowerCase(); // " java programming "
// 替換字符或字符串
String replaced = original.replace('a', 'A'); // " JAvA ProgrAmming "
String replacedAll = original.replaceAll("a", "A"); // " JAvA ProgrAmming "
// 拼接字符串
String concated = original.concat(" Language"); // " Java Programming Language"
String fruits = "apple,orange,banana,grape";
// 分割字符串
String[] fruitArray = fruits.split(",");
// ["apple", "orange", "banana", "grape"]
// 使用正則表達式分割
String complex = "a b c d";
String[] parts = complex.split("\\s+"); // 按一個或多個空格分割
// ["a", "b", "c", "d"]
// 字符串數組連接
String joined = String.join("-", "2020", "10", "20"); // "2020-10-20"
// 多種轉換方式
int num = 123;
String s1 = num + ""; // 簡單但效率不高
String s2 = String.valueOf(num); // 推薦方式
String s3 = Integer.toString(num);
String numStr = "123";
// 使用包裝類的parse方法
int i = Integer.parseInt(numStr);
double d = Double.parseDouble("3.14");
boolean b = Boolean.parseBoolean("true");
// 注意處理NumberFormatException
try {
int n = Integer.parseInt("abc");
} catch (NumberFormatException e) {
System.out.println("數字格式錯誤");
}
// String轉字符數組
String str = "hello";
char[] charArray = str.toCharArray();
// 字符數組轉String
char[] arr = {'J', 'a', 'v', 'a'};
String newStr1 = new String(arr);
String newStr2 = String.valueOf(arr);
String的不可變性導致頻繁修改時性能低下:
String result = "";
for (int i = 0; i < 10000; i++) {
result += i; // 每次循環都創建新對象
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 10000; i++) {
sb.append(i); // 不會創建新對象
}
String result = sb.toString();
常用方法: - append(): 追加內容 - insert(): 插入內容 - delete(): 刪除內容 - reverse(): 反轉字符串
// 推薦方式 - 使用常量池
String s1 = "hello";
// 不推薦方式 - 創建新對象
String s2 = new String("hello");
// 低效方式(編譯后自動優化為StringBuilder)
String result = str1 + str2 + str3;
// 高效方式
StringBuilder sb = new StringBuilder();
sb.append(str1).append(str2).append(str3);
String result = sb.toString();
String s1 = new String("hello").intern();
String s2 = "hello";
System.out.println(s1 == s2); // true
intern()方法的作用: - 將字符串放入常量池(如果池中不存在) - 返回池中的引用
// 使用分隔符連接多個字符串
String joined = String.join(", ", "Java", "Python", "C++");
// "Java, Python, C++"
// 獲取IntStream處理字符
"hello".chars().forEach(c -> System.out.print((char)c));
// 判斷字符串是否空白
boolean blank = " ".isBlank(); // true
// 去除首尾空白(包括全角空格等)
String stripped = " hello ".strip(); // "hello"
// 重復字符串
String repeated = "Java".repeat(3); // "JavaJavaJava"
// 按行分割字符串
String text = "line1\nline2\nline3";
String[] lines = text.lines().toArray(String[]::new);
public boolean isValidUsername(String username) {
if (username == null || username.isBlank()) {
return false;
}
return username.matches("[a-zA-Z0-9_]{4,16}");
}
String path = "/usr/local/bin/java";
String[] parts = path.split("/");
String filename = path.substring(path.lastIndexOf("/") + 1);
public String filterSensitiveWords(String content, Set<String> sensitiveWords) {
String result = content;
for (String word : sensitiveWords) {
result = result.replace(word, "***");
}
return result;
}
Java中的String類提供了豐富的字符串操作方法,理解其不可變性和內存管理機制對于編寫高效程序至關重要。在實際開發中:
掌握String類的使用是Java開發的基礎,合理運用可以顯著提高程序性能和代碼質量。 “`
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。