# Java 分割字串教学

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

Java 拆分字符串教程展示了如何在 Java 中拆分字符串。 我们使用`String`的`split()`，`Pattern`的`splitAsStream()`和 Guava `Splitter`的`on()`方法。

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

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

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

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

## 分割电话号码

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

`StringSplitEx.java`

```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()`将数字拆分为数值。

```java
var phoneNumber = "202-555-0154";

```

这是电话号码。

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

```

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

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

```

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

```java
202
555
0154

```

这是输出。

## 用点字符分割字符串

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

`StringSplitDotEx`

```java
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`

```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`字符串分为四个部分。

```java
Jane
Paul
Ferenc
David-Robert-Julia

```

这是输出。

## 分割和修剪字符串

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

`SplitStringTrimEx.java`

```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()`。

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

```

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

## 用模式串分割字符串

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

`PatternCompileEx.java`

```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`的`splitAsStream()`方法拆分电话号码。

```java
var output = Pattern.compile("-")
    .splitAsStream(phoneNumber)
    .collect(Collectors.toList());

```

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

## 用 Guava 的拆分器拆分字符串

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

```java
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>27.0.1-jre</version>
</dependency>

```

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

`SplitStringGuavaEx.java`

```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`分割字符串。

```java
var result = Splitter.on(',')
        .trimResults()
        .omitEmptyStrings()
        .splitToList(input);

```

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

在本教程中，我们展示了如何在 Java 中分割字符串。 您可能也对相关教程感兴趣： [Java 文件教程](/java/file/)， [Java fibonacci 教程](/java/fibonacci/)， [Java 创建目录](/java/createdirectory/)，[用 Java 复制文件](/java/copyfile/) ， [Java Unix 时间](/java/unixtime/)，[用 Java 创建文件](/java/createfile/)， [Java `StringBuilder`教程](/java/stringbuilder/)和 [Java 教程](/lang/java/)。