Java 字符串 substring()
方法用于字符串的截取并返回字符串的一部分。
关于Java中更多字符串截取的方法请参考 Java字符串截取方法。
语法
public String substring(int startIndex)
public String substring(int startIndex, int endIndex)
如果我们不指定 endIndex,该方法将返回 startIndex 后面的所有字符。
参数
- startIndex : 开始位置
- endIndex : 结束位置
注意:范围是[startIndex,endIndex),下标位置从0开始,endIndex是一个开区间 。
返回值
截取后的字符串。
异常抛出
在满足以下任一条件时抛出StringIndexOutOfBoundsException异常。
- 如果起始索引为负值
- 结束索引低于起始索引。
- 开始或结束索引大于字符串中存在的字符总数。
例子
介绍一些了解该函数的使用方法。
示例1
文件名: SubstringExample.java
public class SubstringExample{
public static void main(String args[]){
String s1="yxjc123";
System.out.println(s1.substring(2,4));//返回jc
System.out.println(s1.substring(2));//返回jc123
}
}
输出:
jc
jc123
jc123
示例2
文件名: SubstringExample2.java
public class SubstringExample2 {
public static void main(String[] args) {
String s1="yxjc123";
String substr = s1.substring(0); // 从 0 开始到结束
System.out.println(substr);
String substr2 = s1.substring(4,7); // 从 4 开始到 7
System.out.println(substr2);
String substr3 = s1.substring(5,15); // 返回异常
}
}
输出:
yxjc123
123
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 15<br> at java.lang.String.substring(String.java:1963)<br> at SubstringExample2.main(SubstringExample2.java:8)
123
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 15<br> at java.lang.String.substring(String.java:1963)<br> at SubstringExample2.main(SubstringExample2.java:8)
内部实现
介绍substring() 方法内部实现是怎样的。
内部实现1
public String substring(int beginIndex) {
if (beginIndex < 0) {
throw new StringIndexOutOfBoundsException(beginIndex);
}
int subLen = value.length - beginIndex;
if (subLen < 0) {
throw new StringIndexOutOfBoundsException(subLen);
}
return (beginIndex == 0) ? this : new String(value, beginIndex, subLen);
}
内部实现2
public String substring(int beginIndex, int endIndex)
{
if (beginIndex < 0)
{
throw new StringIndexOutOfBoundsException(beginIndex);
}
if (endIndex > value.length)
{
throw new StringIndexOutOfBoundsException(endIndex);
}
int subLen = endIndex - beginIndex;
if (subLen < 0)
{
throw new StringIndexOutOfBoundsException(subLen);
}
return ((beginIndex == 0) && (endIndex == value.length)) ? this : new String(value, beginIndex, subLen);
}