String s = "this is an example";
String a = s.substring(11); // a will hold the string starting at character 11 until the end ("example")
String b = s.substring(5, 10); // b will hold the string starting at character 5 and ending right before character 10 ("is an")
String b = s.substring(5, b.length()-3); // b will hold the string starting at character 5 ending right before b' s lenght is out of 3  ("is an exam")

子字串也可以應用於切片並將字元新增/替換為其原始字串。例如,你遇到了包含中文字元的中文日期,但你希望將其儲存為格式良好的日期字串。

String datestring = "2015 年 11 月 17 日"
datestring = datestring.substring(0, 4) + "-" + datestring.substring(5,7) + "-" + datestring.substring(8,10);
//Result will be 2015-11-17

方法提取一塊 String 的。當提供一個引數時,引數是開始,並且片段延伸到 String 的末尾。當給出兩個引數時,第一個引數是起始字元,第二個引數是結束後的字元索引(不包括索引處的字元)。一種簡單的檢查方法是從第二個引數中減去第一個引數應該產生字串的預期長度。

Version < Java SE 7

在 JDK <7u6 版本中,substring 方法例項化 String,它與原始 String 共享相同的支援 char[],並且內部 offsetcount 欄位設定為結果的開始和長度。這樣的共享可能會導致記憶體洩漏,這可以通過呼叫 new String(s.substring(...)) 來強制建立副本來防止,之後可以對 char[] 進行垃圾回收。

Version >= Java SE 7

從 JDK 7u6 開始,substring 方法總是複製整個底層 char[] 陣列,使得複雜度與之前的常量資料相比是線性的,但同時保證了記憶體洩漏的缺失。