首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java String substring() 方法深度解析與實戰技巧

     編輯:Java 相關知識

方法簽名與基本規則

public String substring(int beginIndex, int endIndex)

  • beginIndex:起始索引(包含),從 0 開始計數
  • endIndex:結束索引(不包含)
  • 返回長度:endIndex - beginIndex
  • 核心原則:左閉右開區間 [beginIndex, endIndex)

經典範例

"hamburger".substring(4, 8)  // 返回 "urge"
"smiles".substring(1, 5)     // 返回 "mile"

圖示索引位置:

字符:  h  a  m  b  u  r  g  e  r
索引:  0  1  2  3  4  5  6  7  8
                ↑           ↑
            begin=4     end=8 (不包含)

常見實用場景

1. 截取字符串後 N 個字符

String str = "HelloWorld";
String last3 = str.substring(str.length() - 3); // "rld"

2. 移除前綴/後綴

String url = "https://example.com";
String domain = url.substring("https://".length()); // "example.com"

3. 解析固定格式字符串

String datetime = "2024-01-15 14:30:00";
String datePart = datetime.substring(0, 10);      // "2024-01-15"
String timePart = datetime.substring(11);         // "14:30:00"

底層實現與性能考量 (JDK 7+)

JDK 7 之前 substring 共享底層 char[] 數組,可能導致內存洩漏。JDK 7+ 採用 複製數組 策略,每次調用都創建新字符數組,避免了大字符串引用導致的內存無法釋放問題。

// JDK 7+ 簡化邏輯
public String substring(int beginIndex, int endIndex) {
    int subLen = endIndex - beginIndex;
    char[] newValue = Arrays.copyOfRange(value, beginIndex, endIndex);
    return new String(newValue);
}

異常情況與最佳實踐

異常類型觸發條件
IndexOutOfBoundsExceptionbeginIndex < 0 或 endIndex > length() 或 beginIndex > endIndex

防禦性編程建議

public static String safeSubstring(String str, int begin, int end) {
    if (str == null) return null;
    int len = str.length();
    begin = Math.max(0, Math.min(begin, len));
    end = Math.max(begin, Math.min(end, len));
    return str.substring(begin, end);
}

對比:substring vs subSequence

  • substring 返回 String
  • subSequence 返回 CharSequence(內部實際調用 substring)
  • 一般情況下直接使用 substring 即可

總結

掌握 substring 的「左閉右開」特性是關鍵。結合 length()、indexOf() 等方法可靈活處理各種字符串截取需求。注意 JDK 版本差異對內存的影響,大數據場景下避免頻繁對超長字符串調用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved