原文:http://zetcode.com/java/splitstring

Java 拆分字符串教程展示了如何在 Java 中拆分字符串。 我们使用Stringsplit()PatternsplitAsStream()和 Guava Splitteron()方法。

String具有用于拆分字符串的内置方法:

  • String[] split(String regex) - 将字符串拆分为给定正则表达式的匹配项
  • String[] split(String regex, int limit) - 在给定正则表达式的匹配项附近拆分此字符串

该方法返回一个拆分字符串数组。

除了split()方法外,Pattern也具有splitAsStream()方法。

分割电话号码

在第一个示例中,我们拆分了一个电话号码。

StringSplitEx.java

  1. package com.zetcode;
  2. import java.util.Arrays;
  3. public class StringSplitEx {
  4. public static void main(String[] args) {
  5. var phoneNumber = "202-555-0154";
  6. String[] output = phoneNumber.split("-");
  7. Arrays.stream(output).forEach(part -> System.out.println(part));
  8. }
  9. }

电话号码通常用破折号(-)分隔。 程序使用split()将数字拆分为数值。

  1. var phoneNumber = "202-555-0154";

这是电话号码。

  1. String[] output = phoneNumber.split("-");

我们用破折号将字符串分开; split()方法返回从主字符串分割的子字符串数组。

  1. Arrays.stream(output).forEach(part -> System.out.println(part));

我们向控制台显示拆分的部分。

  1. 202
  2. 555
  3. 0154

这是输出。

用点字符分割字符串

点字符在正则表达式语法中具有特殊含义。 要用点分隔字符串,我们需要对其进行转义或使用Pattern.quote()

StringSplitDotEx

  1. package com.zetcode;
  2. import java.util.Arrays;
  3. import java.util.regex.Pattern;
  4. public class StringSplitDotEx {
  5. public static void main(String[] args) {
  6. var address = "127.0.0.1";
  7. // String[] output = address.split("\\.");
  8. String[] output = address.split(Pattern.quote("."));
  9. Arrays.stream(output).forEach(part -> System.out.println(part));
  10. }
  11. }

该程序将拆分 IP 地址。

限制分割字符串

limit选项控制拆分子字符串的数量。

SplitStringLimitEx.java

  1. package com.zetcode;
  2. import java.util.Arrays;
  3. public class SplitStringLimitEx {
  4. public static void main(String[] args) {
  5. var names = "Jane-Paul-Ferenc-David-Robert-Julia";
  6. var output = names.split("-", 4);
  7. Arrays.stream(output).forEach(System.out::println);
  8. }
  9. }

该程序将names字符串分为四个部分。

  1. Jane
  2. Paul
  3. Ferenc
  4. David-Robert-Julia

这是输出。

分割和修剪字符串

我们通常需要删除字符串周围的空格字符。

SplitStringTrimEx.java

  1. package com.zetcode;
  2. import java.util.Arrays;
  3. public class SplitStringTrimEx {
  4. public static void main(String[] args) {
  5. var input = " wood, falcon\t, sky, forest\n";
  6. var output = input.trim().split("\\s*,\\s*");
  7. Arrays.stream(output).forEach(System.out::println);
  8. }
  9. }

要删除空白,我们使用trim()

  1. var output = input.trim().split("\\s*,\\s*");

正则表达式用逗号分隔输入字符串,逗号前后可能有任意多个空格。

用模式串分割字符串

我们可以使用流使用函数式的方式使用Pattern分割字符串。

PatternCompileEx.java

  1. package com.zetcode;
  2. import java.util.regex.Pattern;
  3. import java.util.stream.Collectors;
  4. public class PatternCompileEx {
  5. public static void main(String[] args) {
  6. var phoneNumber = "202-555-0154";
  7. var output = Pattern.compile("-")
  8. .splitAsStream(phoneNumber)
  9. .collect(Collectors.toList());
  10. output.forEach(System.out::println);
  11. }
  12. }

该示例使用PatternsplitAsStream()方法拆分电话号码。

  1. var output = Pattern.compile("-")
  2. .splitAsStream(phoneNumber)
  3. .collect(Collectors.toList());

我们编译包含用于分割的字符的正则表达式。 在编译的表达式上,我们调用splitAsStream()以获取拆分子字符串流。 最后,我们将流收集到一个列表中。

用 Guava 的拆分器拆分字符串

以下示例使用 Google 的 Guava 库拆分字符串。 它使用Splitter类。

  1. <dependency>
  2. <groupId>com.google.guava</groupId>
  3. <artifactId>guava</artifactId>
  4. <version>27.0.1-jre</version>
  5. </dependency>

我们需要包括 Guava 的依赖项。

SplitStringGuavaEx.java

  1. package com.zetcode;
  2. import com.google.common.base.Splitter;
  3. public class SplitStringGuavaEx {
  4. public static void main(String[] args) {
  5. var input = " falcon, \t\tforest\t, \t\t, moderate, sky\n";
  6. var result = Splitter.on(',')
  7. .trimResults()
  8. .omitEmptyStrings()
  9. .splitToList(input);
  10. result.forEach(System.out::println);
  11. }
  12. }

程序使用 Guava 的Splitter分割字符串。

  1. var result = Splitter.on(',')
  2. .trimResults()
  3. .omitEmptyStrings()
  4. .splitToList(input);

我们使用Splitter.on()从输入字符串中提取不重叠的子字符串。 trimResults()删除空格字符,omitEmptyStrings()删除潜在的空字符串。 结果将转换为列表。

在本教程中,我们展示了如何在 Java 中分割字符串。 您可能也对相关教程感兴趣: Java 文件教程Java fibonacci 教程Java 创建目录用 Java 复制文件Java Unix 时间用 Java 创建文件Java StringBuilder教程Java 教程