在Java中字符串截取是开发过程中经常使用的方法,它有多种方法实现。
- String类的subString()方法
- StringUtils工具类提供的方法
- split()正则方法
下面分别介绍这些方法,并给出相关例子。
String类的subString()方法截取
subString()方法如下
//从开始位置beginIndex截取
public String substring(int beginIndex)
//从开始位置beginIndex截取直到endIndex
public String substring(int beginIndex, int endIndex)
String类的subString()方法可以传入1个参数开始位置;也可以传入两个参数开始和结尾位置。
例子
package com.yxjc;
public class Test {
public static void main(String args[]) {
String s = "yxjc123_com";
System.out.println(s.substring(4));//从位置4开始截取
System.out.println(s.substring(8));//从位置4开始截取
System.out.println(s.substring(0,4));//0到4
System.out.println(s.substring(4,7));//4到6
}
}
输出123_com
com
yxjc
123
com
yxjc
123
从结果中,我们可以看出substring()方法遵循的是左闭右开 [beginIndex, endIndex) 原则,即左边要包含,右边不要。
StringUtils工具类提供的方法
可以使用maven导入这个包
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
相关字符串截取方法如下
例子
import org.apache.commons.lang.StringUtils;
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
String s = "yxjc123_com";
String ss = "yxjc123_com_hello_world";
//与第一种方法效果一样
System.out.println(StringUtils.substring(s, 4));
System.out.println(StringUtils.substring(s, 4, 7));
//截取某个字符串之前的字符
System.out.println("【截取某个字符串之前的字符】");
System.out.println("substringBefore:" + StringUtils.substringBefore(ss, "_"));//从分隔符第一次出现的位置向前截取
System.out.println("substringBeforeLast:" + StringUtils.substringBeforeLast(ss, "_"));//从分隔符最后一次出现的位置向前截取
//截取某个字符串之后的字符
System.out.println("【截取某个字符串之后的字符】");
System.out.println("substringAfter:" + StringUtils.substringAfter(ss, "_"));//从分隔符第一次出现的位置向后截取
System.out.println("substringAfterLast:" + StringUtils.substringAfterLast(ss, "_"));//从分隔符最后一次出现的位置向后截取
//截取两个字符串之间隔的字符
System.out.println("【截取两个字符串之间隔的字符】");
System.out.println("substringBetween:" + StringUtils.substringBetween(ss, "o"));//两个0之间
System.out.println("substringBetween:" + StringUtils.substringBetween(ss, "_"));//两个_之间
System.out.println("substringBetween:" + StringUtils.substringBetween(ss, "123", "hello"));//123和字符串hello之间
System.out.println("substringsBetween:" + Arrays.toString(StringUtils.substringsBetween(ss, "123", "hello")) );
}
}
输出
123_com
123
【截取某个字符串之前的字符】
substringBefore:yxjc123
substringBeforeLast:yxjc123_com_hello
【截取某个字符串之后的字符】
substringAfter:com_hello_world
substringAfterLast:world
【截取两个字符串之间隔的字符】
substringBetween:m_hell
substringBetween:com
substringBetween:_com_
substringsBetween:[_com_]
123
【截取某个字符串之前的字符】
substringBefore:yxjc123
substringBeforeLast:yxjc123_com_hello
【截取某个字符串之后的字符】
substringAfter:com_hello_world
substringAfterLast:world
【截取两个字符串之间隔的字符】
substringBetween:m_hell
substringBetween:com
substringBetween:_com_
substringsBetween:[_com_]
split()正则截取字符串
str.split()方法如下:
//返回字符串数组,传入要分割的正则字符串
public String[] split(String regex)
//返回字符串数组,传入要分割的正则字符串,limit 是限制返回的数组长度
public String[] split(String regex, int limit)
例子
String str="yxjc123_com";
String[] strArr=str.split("_");
System.out.println(strArr[0]);
System.out.println(strArr[1]);
带有limit参数的例子
import java.util.Arrays;
public class Test{
public static void main(String[] args) {
String str="yxjc123_com_hello_world";
String[] strArr=str.split("_",2);
System.out.print(Arrays.toString(strArr) + "\n");
}
}
limit限制了返回的长度为2,减少了系统的开销。