Java String substring()

2025年3月24日 | 阅读 6 分钟

Java 作为一门通用且广泛使用的编程语言,提供了丰富的字符串处理功能。开发人员经常利用的一个强大功能就是 substring 方法。该方法允许我们提取字符串的一部分,从而在处理和操作文本数据时具有灵活性。在本节中,我们将深入探讨 Java 中 substring 方法的细节,并探索如何在各种场景中有效地使用它。

方法签名

如果我们不指定 endIndex,该方法将返回从 startIndex 开始的所有字符。

参数

startIndex:起始索引是包含的

endIndex:结束索引是不包含的

返回值

Java 中的 substring 方法返回一个新字符串,该字符串表示原始字符串的指定部分。它不会修改原始字符串,而是创建一个包含从指定起始索引到指定结束索引的字符的新字符串。

Exception

如果满足以下任一条件,它将抛出 StringIndexOutOfBoundsException

  • 如果起始索引是负数
  • 结束索引小于起始索引。
  • 起始索引或结束索引大于字符串中存在的字符总数。

内部实现 substring(int beginIndex)

内部实现 substring(int beginIndex, int endIndex)

Java substring() 方法示例

示例

编译并运行

输出

va
vatpoint

substring() 方法示例 2

示例

编译并运行

输出

TpointTech
point
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: begin 5, end 15, length 10

关键注意事项

虽然 substring 方法功能强大,但有一些关键考虑因素需要牢记

1. 索引

Java 使用零基索引,这意味着字符串中的第一个字符位于索引 0。在为 substring 指定索引时,请确保它们在有效范围内(0 到 length - 1),以避免 IndexOutOfBoundsException。

2. 不可变字符串

Java 中的字符串是不可变的,这意味着一旦创建,其值就不能被更改。substring 方法返回一个新字符串,而原始字符串保持不变。

substring() 方法的应用

substring() 方法可用于执行前缀或后缀提取。例如,我们有一个姓名列表,需要筛选出姓氏为“singh”的姓名。下面的程序展示了这一点。

示例

编译并运行

输出

Yuvraj Singh
Harbhajan Singh
Gurjit Singh
Sandeep Singh
Milkha Singh

substring() 方法还可以用于检查字符串是否为回文。让我们通过一个 Java 程序来理解这一点。

示例

编译并运行

输出

madam is a palindrome.
rock is not a palindrome.
eye is a palindrome.
noon is a palindrome.
kill is not a palindrome.

Java 中的 substring 方法是处理字符串的强大工具,它使开发人员能够有效地提取和处理子字符串。了解其各种形式并考虑相关的最佳实践,可以使开发人员充分发挥该方法的潜力。无论是提取文本的特定部分、反转子字符串还是提取直到某个字符的文本,substring 方法都是 Java 开发人员工具箱中的宝贵资产。


Java 字符串 substring 选择题

1. 以下 Java 代码片段打印什么?

  1. 编程
  2. 程序
  3. Programm
  4. gramming
 

答案:B

解释: substring(5, 12) 方法调用从字符串“Java Programming”中提取从索引 5(包含)到 12(不包含)的字符,结果为“Program”。


2. 如果 beginIndex 大于或等于 endIndex,substring() 方法会抛出哪个异常?

  1. NullPointerException
  2. ArrayIndexOutOfBoundsException
  3. StringIndexOutOfBoundsException
  4. IndexOutOfBoundsException
 

答案:C

解释: 如果 beginIndex 大于或等于 endIndex,或者任何一个索引为负数或大于字符串长度,substring() 方法将抛出 StringIndexOutOfBoundsException。


3. 当在空字符串“”上调用 substring() 方法时,结果是什么?

  1. 一个空字符串“”
  2. NullPointerException
  3. StringIndexOutOfBoundsException
  4. IndexOutOfBoundsException
 

答案:A

解释: 在空字符串上调用 substring() 会返回另一个空字符串“” 。在这种情况下不会抛出任何异常。


4. 哪个陈述正确地描述了 substring(beginIndex) 和 substring(beginIndex, endIndex) 方法之间的区别?

  1. 如果 endIndex 等于 length(),则两个方法返回相同的输出。
  2. substring(beginIndex) 从 beginIndex 返回到字符串末尾的字符,而 substring(beginIndex, endIndex) 从 beginIndex 返回到 endIndex-1 的字符。
  3. substring(beginIndex) 可能抛出 NullPointerException,而 substring(beginIndex, endIndex) 不会。
  4. substring(beginIndex, endIndex) 可以修改原始字符串,而 substring(beginIndex) 创建一个新的字符串对象。
 

答案:B

解释: substring(beginIndex) 提取从 beginIndex 到字符串末尾的字符。substring(beginIndex, endIndex) 提取从 beginIndex 到 endIndex-1 的字符,其中 endIndex 是不包含的。


5. 使用 substring() 方法时,以下哪种情况不会抛出 StringIndexOutOfBoundsException?

  1. s.substring(0, s.length() + 1)
  2. s.substring(5, 5)
  3. s.substring(0, 0)
  4. s.substring(3, 2)
 

答案:C

解释: s.substring(0, 0) 是有效的,并返回一个空字符串“” 。其他选项(A、B、D)将抛出 StringIndexOutOfBoundsException,因为它们涉及无效的索引范围(超出界限或反转)。