Java split

语法

1
2
3
4
5
6
7
8
9
10
11
public String[] split(String regex)
# 或
public String[] split(String regex, int [limit])

参数:
regex: 应用于字符串的正则表达式。
limit: 数组中字符串的数量限制。如果它为零,它将返回所有匹配正则表达式的字符串。

返回值:
字符串数组
例外:PatternSyntaxException 如果正则表达式的模式无效

功能

通过指定的分隔符将字符串分割成若干个子字符串,子字符串数组通过返回值返回。

示例

单个分隔符

字符串中仅包含单个分隔符,通过单个分隔符将字符串分割成若干个子字符串。

1
2
3
4
5
6
7
8
9
public class Test {
public static void main(String[] args) {
String str = "2020,text,今天";
String[] data = str.split(",");
for (int i = 0; i < data.length; i++) {
System.out.println(data[i]);
}
}
}

运行结果:

1
2
3
2020
text
今天

特殊符号 . | * \ ] [(点、竖、星号、斜线、中括号)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public class Test {
public static void main(String[] args) {
String str = "asczscx.xsa";
String[] split = str.split("[.]"); // 对点进行处理
for (String s : split){
System.out.println(s);
}

str = "asczscx|xsa";
String[] split = str.split("\\|"); // 对竖进行处理,字符串中包含"|"分隔符,需要使用转义字符"\\"
for (String s : split){
System.out.println(s);
}

str = "asczscx*xsa";
String[] split = str.split("\\*"); // 对星号进行处理,需要使用转义字符"\\"
for (String s : split){
System.out.println(s);
}

str = "asczscx\\xsa";
String[] split = str.split("\\\\"); // 对斜线进行处理
for (String s : split){
System.out.println(s);
}

str = "asczscx[]xsa";
String[] split = str.split("\\[\\]"); // 对中括号的进行处理
for (String s : split){
System.out.println(s);
}
}
}

上述输出均为:

1
2
asczscx
xsa

指定字符串数量限制

字符串分割成若干个子字符串,限制子字符串的个数。

  • 如果 limit > 0,(从左到右)最多分割 n - 1 次,数组的长度将不会大于 n,结尾的空字符串不会丢弃。
  • 如果 limit < 0,匹配到多少次就分割多少次,而且数组可以是任何长度。结尾的空字符串不会丢弃。
  • 如果 limit = 0,匹配到多少次就分割多少次,数组可以是任何长度,并且结尾空字符串将被丢弃。

示例:

  • 将limit 设置为 0:这将排除尾随的空字符串。
  • 将limit 指定为 1,因此 split 方法仅返回1个子字符串。
  • 将limit 指定为 2,因此 split 方法仅返回2个子字符串。
  • 当limit 为负数时,它会在输出中包含尾随的空字符串。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class Test {
public static void main(String[] args) {
String s1 = "hello/hi/bye///";
for (String w : s1.split("/", 0)) { // 将limit 设置为 0:这将排除尾随的空字符串。
System.out.println("returning words1:" + w);
}
System.out.println("------------------");
for (String w : s1.split("/", 1)) { // 将limit 指定为 1,因此 split 方法仅返回1个子字符串。
System.out.println("returning words2:" + w);
}
System.out.println("------------------");
for (String w : s1.split("/", 2)) { // 将limit 指定为 2,因此 split 方法仅返回2个子字符串。
System.out.println("returning words3:" + w);
}
System.out.println("------------------");
int i = 1;
for (String w : s1.split("/", -1)) { // 当limit 为负数时,它会在输出中包含尾随的空字符串。
System.out.print(i++ + ". ");
System.out.println(w);
}
}
}

运行结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
returning words1:hello
returning words1:hi
returning words1:bye
------------------
returning words2:hello/hi/bye///
------------------
returning words3:hello
returning words3:hi/bye///
------------------
1. hello
2. hi
3. bye
4.
5.
6.

正则表达式表示分隔符

字符串中包含分隔符,通过正则表达式的形式确定分隔符,并通过分隔符将字符串分割成若干个子字符串。

在正则表达式中 \d+ 表示一个或多个数字,是用于从一堆数字字母以及其它字符组成的字符串中获取非数字字符或字符串。

1
2
3
4
5
6
7
8
9
10
public class Test {
public static void main(String[] args) {
String str = "2018年11月18日abcd85gg688";
//正则表达式中\d+表示一个或多个数字,java中\\表示一个普通\
String[] data = str.split("\\d+");
for (int i = 0; i < data.length; i++) {
System.out.println(data[i]);
}
}
}

运行结果:

1
2
3
4


日abcd
gg

空格

字符串中包含空格分隔符,需要通过空格分隔符将字符串分割成若干个子字符串。

返回字符串中的所有单词,仅不包括空格。

1
2
3
4
5
6
7
8
9
10
public class Test {
public static void main(String[] args) {
String s1 = "java string split method";
// String[] words = s1.split("\\s");
String[] words = s1.split(" ");//两种方法都可以,根据空格拆分字符串
for (String w : words) {
System.out.println(w);
}
}
}

运行结果:

1
2
3
4
java
string
split
method

多个分隔符

字符串中包含多种分隔符,需要通过多种分隔符将字符串分割成若干个子字符串。

  • 方式1.多个分隔符用引号括起来
  • 方式2.多个分隔符用引号和中括号括起来
1
2
3
4
5
6
7
8
9
10
11
12
public class Test {
public static void main(String[] args) {
String str = "2021年11月18日;英语,数学,语文;";
// 方式1.多个分隔符用引号括起来,并且用“|”进行分割
// String[] data = str.split(",|;");
// 方式2.多个分隔符用引号和中括号括起来
String[] data = str.split("[,;]");
for (int i = 0; i < data.length; i++) {
System.out.println(data[i]);
}
}
}

运行结果:

1
2
3
4
20211118
英语
数学
语文

大写字母拆分字符串

字符串中包含大写字母,需要通过将大写字母作为分隔符,将字符串分割成若干个子字符串。

1
2
3
4
5
6
7
8
9
10
11
12
public class Test {
public static void main(String[] args) {
String s = "AB#K$bb";
String[] str = s.split("(?=\\p{Lu})");

System.out.println("Number of substrings: " + str.length);

for (int i = 0; i < str.length; i++) {
System.out.println("Str[" + i + "]:" + str[i]);
}
}
}

运行结果:

1
2
3
4
Number of substrings: 3
Str[0]:A
Str[1]:B#
Str[2]:K$bb

Java split
https://flepeng.github.io/021-Java-31-语法-Java-split/
作者
Lepeng
发布于
2023年3月24日
许可协议