ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 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/)。