Java 字符串常用方法

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

示例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)

内部实现

介绍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);
}