溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中String類字符串怎么用

發布時間:2021-10-19 17:05:43 來源:億速云 閱讀:184 作者:小新 欄目:開發技術
# 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對象

2.1 直接賦值方式

String str1 = "Java";  // 使用字符串常量池

特點: - JVM會先檢查字符串常量池 - 如果存在則直接引用,否則創建新對象并放入池中 - 效率較高,推薦使用

2.2 構造方法創建

String str2 = new String("Java");  // 強制創建新對象

特點: - 無論常量池是否存在,都會在堆中創建新對象 - 可能造成內存浪費 - 適用于需要明確新建對象的場景

2.3 不同創建方式的比較

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類的常用方法

3.1 獲取字符串信息

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

3.2 字符串比較

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)

3.3 字符串操作

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"

3.4 字符串分割與連接

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"

四、String與其他類型的轉換

4.1 基本類型轉String

// 多種轉換方式
int num = 123;
String s1 = num + "";  // 簡單但效率不高
String s2 = String.valueOf(num);  // 推薦方式
String s3 = Integer.toString(num);

4.2 String轉基本類型

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("數字格式錯誤");
}

4.3 字符數組與String轉換

// 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);

五、StringBuilder和StringBuffer

5.1 為什么需要可變字符串類

String的不可變性導致頻繁修改時性能低下:

String result = "";
for (int i = 0; i < 10000; i++) {
    result += i;  // 每次循環都創建新對象
}

5.2 StringBuilder使用

StringBuilder sb = new StringBuilder();
for (int i = 0; i < 10000; i++) {
    sb.append(i);  // 不會創建新對象
}
String result = sb.toString();

常用方法: - append(): 追加內容 - insert(): 插入內容 - delete(): 刪除內容 - reverse(): 反轉字符串

5.3 StringBuffer與StringBuilder的區別

  • StringBuffer是線程安全的(方法有synchronized修飾)
  • StringBuilder是非線程安全的,但性能更高
  • 單線程環境下推薦使用StringBuilder

六、字符串性能優化

6.1 字符串常量池的使用

// 推薦方式 - 使用常量池
String s1 = "hello";

// 不推薦方式 - 創建新對象
String s2 = new String("hello");

6.2 字符串拼接優化

// 低效方式(編譯后自動優化為StringBuilder)
String result = str1 + str2 + str3;

// 高效方式
StringBuilder sb = new StringBuilder();
sb.append(str1).append(str2).append(str3);
String result = sb.toString();

6.3 intern()方法的使用

String s1 = new String("hello").intern();
String s2 = "hello";
System.out.println(s1 == s2);  // true

intern()方法的作用: - 將字符串放入常量池(如果池中不存在) - 返回池中的引用

七、Java 8及以后版本的字符串增強

7.1 String.join()方法

// 使用分隔符連接多個字符串
String joined = String.join(", ", "Java", "Python", "C++");
// "Java, Python, C++"

7.2 String類的chars()方法

// 獲取IntStream處理字符
"hello".chars().forEach(c -> System.out.print((char)c));

7.3 Java 11新增方法

// 判斷字符串是否空白
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);

八、實際應用示例

8.1 用戶輸入驗證

public boolean isValidUsername(String username) {
    if (username == null || username.isBlank()) {
        return false;
    }
    return username.matches("[a-zA-Z0-9_]{4,16}");
}

8.2 文件路徑處理

String path = "/usr/local/bin/java";
String[] parts = path.split("/");
String filename = path.substring(path.lastIndexOf("/") + 1);

8.3 敏感信息過濾

public String filterSensitiveWords(String content, Set<String> sensitiveWords) {
    String result = content;
    for (String word : sensitiveWords) {
        result = result.replace(word, "***");
    }
    return result;
}

九、總結

Java中的String類提供了豐富的字符串操作方法,理解其不可變性和內存管理機制對于編寫高效程序至關重要。在實際開發中:

  1. 優先使用直接賦值方式創建字符串
  2. 頻繁修改字符串時使用StringBuilder/StringBuffer
  3. 合理使用字符串常量池優化內存
  4. 注意字符串比較時equals和==的區別
  5. 利用Java新版本提供的增強方法簡化代碼

掌握String類的使用是Java開發的基礎,合理運用可以顯著提高程序性能和代碼質量。 “`

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女