跳转至

Java 分割字串教学

原文: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

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

这是输出。

分割和修剪字符串

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

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);
    }
}

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

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 中分割字符串。 您可能也对相关教程感兴趣: Java 文件教程Java fibonacci 教程Java 创建目录用 Java 复制文件Java Unix 时间用 Java 创建文件Java StringBuilder教程Java 教程



回到顶部