Java 拆分字符串教程展示了如何在 Java 中拆分字符串。 我们使用String's
split()
,Pattern's
,splitAsStream()
和 Guava Splitter's
on()
方法。
String
具有用于拆分字符串的内置方法:
String[]
split(String regex)
-将字符串拆分为给定正则表达式的匹配项String[]
split(String regex, int limit)
-在给定正则表达式的匹配项附近拆分此字符串
该方法返回一个拆分字符串数组。
除了split()
方法外,Pattern
也具有splitAsStream()
方法。
分割电话号码
在第一个示例中,我们拆分了一个电话号码。
StringSplitEx.java
package com.zetcode;
import java.util.Arrays;
public class StringSplitEx {
public static void main(String[] args) {
var phoneNumber = "202-555-0154";
String[] output = phoneNumber.split("-");
Arrays.stream(output).forEach(part -> System.out.println(part));
}
}
电话号码通常用破折号(-)分隔。 程序使用split()
将数字拆分为数值。
var phoneNumber = "202-555-0154";
这是电话号码。
String[] output = phoneNumber.split("-");
我们用破折号将字符串分开; split()
方法返回从主字符串分割的子字符串数组。
Arrays.stream(output).forEach(part -> System.out.println(part));
我们向控制台显示拆分的部分。
202
555
0154
这是输出。
用点字符分割字符串
点字符在正则表达式语法中具有特殊含义。 要用点分隔字符串,我们需要对其进行转义或使用Pattern.quote()
。
StringSplitDotEx
package com.zetcode;
import java.util.Arrays;
import java.util.regex.Pattern;
public class StringSplitDotEx {
public static void main(String[] args) {
var address = "127.0.0.1";
// String[] output = address.split("\\.");
String[] output = address.split(Pattern.quote("."));
Arrays.stream(output).forEach(part -> System.out.println(part));
}
}
该程序将拆分 IP 地址。
限制分割字符串
limit
选项控制拆分子字符串的数量。
SplitStringLimitEx.java
package com.zetcode;
import java.util.Arrays;
public class SplitStringLimitEx {
public static void main(String[] args) {
var names = "Jane-Paul-Ferenc-David-Robert-Julia";
var output = names.split("-", 4);
Arrays.stream(output).forEach(System.out::println);
}
}
该程序将names
字符串分为四个部分。
Jane
Paul
Ferenc
David-Robert-Julia
This is the output.
分割和修剪字符串
我们通常需要删除字符串周围的空格字符。
SplitStringTrimEx.java
package com.zetcode;
import java.util.Arrays;
public class SplitStringTrimEx {
public static void main(String[] args) {
var input = " wood, falcon\t, sky, forest\n";
var output = input.trim().split("\\s*,\\s*");
Arrays.stream(output).forEach(System.out::println);
}
}
要删除空白,我们使用trim()
。
var output = input.trim().split("\\s*,\\s*");
正则表达式用逗号分隔输入字符串,逗号前后可能有任意多个空格。
用模式串分割字符串
我们可以使用流使用功能性的方式使用Pattern
分割字符串。
PatternCompileEx.java
package com.zetcode;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
public class PatternCompileEx {
public static void main(String[] args) {
var phoneNumber = "202-555-0154";
var output = Pattern.compile("-")
.splitAsStream(phoneNumber)
.collect(Collectors.toList());
output.forEach(System.out::println);
}
}
该示例使用Pattern's
splitAsStream()
方法拆分电话号码。
var output = Pattern.compile("-")
.splitAsStream(phoneNumber)
.collect(Collectors.toList());
我们编译包含用于分割的字符的正则表达式。 在编译的表达式上,我们调用splitAsStream()
以获取拆分子字符串流。 最后,我们将流收集到一个列表中。
用 Guava 的拆分器拆分字符串
以下示例使用 Google 的 Guava 库拆分字符串。 它使用Splitter
类。
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>27.0.1-jre</version>
</dependency>
我们需要包括 Guava 的依赖性。
SplitStringGuavaEx.java
package com.zetcode;
import com.google.common.base.Splitter;
public class SplitStringGuavaEx {
public static void main(String[] args) {
var input = " falcon, \t\tforest\t, \t\t, moderate, sky\n";
var result = Splitter.on(',')
.trimResults()
.omitEmptyStrings()
.splitToList(input);
result.forEach(System.out::println);
}
}
程序使用 Guava 的Splitter
分割字符串。
var result = Splitter.on(',')
.trimResults()
.omitEmptyStrings()
.splitToList(input);
我们使用Splitter.on()
从输入字符串中提取不重叠的子字符串。 trimResults()
删除空格字符,omitEmptyStrings()
删除潜在的空字符串。 结果将转换为列表。
在本教程中,我们展示了如何在 Java 中分割字符串。