Java String substring()方法

Java String类的substring()方法返回字符串的一部分。

在Java的substring方法中,我们传递了beginIndex和endIndex两个数字位置,其中beginIndex是包含的,endIndex是不包含的。换句话说,beginIndex从0开始,而endIndex从1开始。

Java字符串中有两种类型的substring方法。

语法

public String substring(int startIndex)  // type - 1  
and    
public String substring(int startIndex, int endIndex)  // type - 2  

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

参数

startIndex:起始索引(包含)

endIndex:结束索引(不包含)

返回值

指定的子字符串

异常抛出

当满足以下任一条件时,抛出StringIndexOutOfBoundsException异常。

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

substring(int beginIndex)的内部实现

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

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

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

Java String substring()方法示例

文件名:SubstringExample.java

public class SubstringExample{  
public static void main(String args[]){  
String s1="javatpoint";  
System.out.println(s1.substring(2,4));//returns va  
System.out.println(s1.substring(2));//returns vatpoint  
}}  

输出:

va
vatpoint

Java String substring()方法示例2

文件名:SubstringExample2.java

public class SubstringExample2 {  
    public static void main(String[] args) {  
        String s1="Javatpoint";    
        String substr = s1.substring(0); // 从 0 开始到结束
        System.out.println(substr);  
        String substr2 = s1.substring(5,10); // 从 5 开始到 10  
        System.out.println(substr2);    
        String substr3 = s1.substring(5,15); //返回异常
    }  
}  

输出:

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

substring()方法的应用

1)substring()方法可用于进行一些前缀或后缀提取。例如,我们可以有一个姓名列表,并且需要过滤出姓为"singh"的姓名。下面的程序展示了相同的效果。

文件名:SubstringExample3.java

public class SubstringExample3   
{  
// main method  
public static void main(String argvs[])  
{  
String str[] =  
{  
"Praveen Kumar",  
"Yuvraj Singh",  
"Harbhajan Singh",  
"Gurjit Singh",  
"Virat Kohli",  
"Rohit Sharma",  
"Sandeep Singh",  
"Milkha Singh"  
};  
  
String surName = "Singh";  
int surNameSize = surName.length();  
  
int size = str.length;  
  
for(int j = 0; j < size; j++)  
{  
    int length = str[j].length();  
    // 提取姓氏 
    String subStr = str[j].substring(length - surNameSize);  
      
    // 检查姓氏是否等于“Singh”
    if(subStr.equals(surName))  
    {  
        System.out.println(str[j]);  
    }  
}  
  
}  
}  

输出:

Yuvraj Singh
Harbhajan Singh
Gurjit Singh
Sandeep Singh
Milkha Singh

2)substring()方法还可用于检查字符串是否为回文。

文件名:SubstringExample4.java

public class SubstringExample4   
{  
public boolean isPalindrome(String str)  
{  
int size = str.length();  
  
// 处理基本情况   
if(size == 0 || size == 1)  
{  
//一个空字符串   
//或者只有一个字符的字符串   
//总是回文   
return true;  
}  
String f = str.substring(0, 1);  
String l = str.substring(size - 1);  
//比较字符串的第一个和最后一个字符  
if(l.equals(f))  
{  
//使用 substring() 方法递归地寻找解决方案  
//为下一次递归减少 2 的字符数    
return isPalindrome(str.substring(1, size - 1));  
}  
return false;  
}  
// main method  
public static void main(String argvs[])  
{  
//实例化类 SubstringExample4      
SubstringExample4 obj = new SubstringExample4();  
String str[] =  
{  
"madam",  
"rock",  
"eye",  
"noon",  
"kill"  
};  
int size = str.length;  
  
for(int j = 0; j < size; j++)  
{  
if(obj.isPalindrome(str[j]))  
{  
System.out.println(str[j] + " is a palindrome.");  
}  
else  
{  
System.out.println(str[j] + " is not a palindrome.");  
}  
}  
}  
}  

输出:

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

标签: java, Java面试题, Java下载, java教程, java技术, Java学习, Java学习教程, Java语言, Java开发, Java入门教程, Java进阶教程, Java高级教程, Java笔试题, Java编程思想