Java String substring()方法
学习在Java中从给定的字符串中获取两个索引之间的子串。请注意,字符串是基于字符数组的数据类型,而字符串的第一个字符位于索引0处。
如果我们在Java中存储一个字符串“Hello World”,那么它会在内存中创建一个大小为11的字符数组,以存储字符串值的所有字符。
String str = "Hello World";
以下是内存中数组的图示表示。
1.String.substring() API
String.substring()
是 Java 中的一个方法,它返回一个新的字符串,该字符串是从给定字符串中的指定开始索引到可选结束索引的子串。这些索引确定了原始字符串中子串的位置。
substring()
方法接受两个参数:
beginIndex
:子串的起始索引。这个索引位置是包含的,也就是指定索引处的字符包含在子串中。endIndex
:子串的结束索引。这个索引位置是不包含的,也就是指定索引处的字符不包括在子串中。
String substring(int beginIndex) String substring(int beginIndex, int endIndex)
该方法返回有效开始索引和结束索引之间的子字符串。如果索引无效,那么我们在运行时可能会发生 IndexOutOfBoundsException 异常错误(角标越界异常)。
2.substring代码案例
让我们看一些示例,以了解 substring()
方法的工作方式。
2.1. 使用 beginIndex 和 endIndex
当需要从给定的索引位置开始查找子串并结束于给定的结束索引位置时,可以传递两个索引(起始和结束索引)。请注意以下几点:
beginIndex
可以大于endIndex
。- 两个索引必须大于或等于0。
- 两个索引必须小于字符串的长度。
- 如果我们将相同的索引值传递给两个参数,将返回一个空字符串。
在以下示例中,我们正在查找索引0和5之间的子串。请记住,结束索引是排除的,因此不包括结束索引处的字符。在这种情况下,结束索引处的字符是空格。
同样,我们可以搜索索引为2到8之间的子字符串。
Assertions.assertEquals("llo Wo", str.substring(2, 8));
2.2. 仅使用 beginIndex
当我们不传递 endIndex 参数时,子字符串将一直取到字符串的最后一个字符。换句话说,如果未指定,endIndex 的值始终为 ‘string.length() – 1’。
在以下示例中,我们从索引位置 6 获取子字符串。
Assertions.assertEquals("World", str.substring(6));
3.IndexOutOfBoundsException
如前所述,如果我们传递一个无效的索引(例如负索引值),该索引在字符数组中不存在,或者起始索引大于结束索引,那么在运行时将会抛出 IndexOutOfBoundsException 异常。
Assertions.assertThrows(IndexOutOfBoundsException.class, () -> { //无效索引 str.substring(-1); }); Assertions.assertThrows(IndexOutOfBoundsException.class, () -> { //开始索引 > 结束索引 str.substring(6, 4); });
4.结论
在这个简短的Java教程中,我们学习了如何使用起始和结束索引来获取指定字符串的子字符串。我们了解了关于有效索引值的规则,其中起始索引是包含的,而结束索引是不包含的。