如何在 Java 中分割字符串:新手与专家的完整指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

“帮帮我,我无法分割字符串!”——一个问题的故事

\n\n

想象一下:你在用 Java 编写日志解析器、处理 CSV 文件,或者只是想将用户输入拆分成单词。然后——卡住了。该怎么做?如果你曾经搜索过“How do I split a string in Java”,你就会知道:这个问题在 Stack Overflow 上积累了数十万次浏览。不是因为 Java 程序员懒惰,而是因为 split() 功能强大,但暗藏陷阱。

\n\n

在本文中,我们将从头到尾讲解 Java 中的字符串分割。你将了解 split() 方法的工作原理、正则表达式会带来哪些惊喜,以及如何避免每个新手都会遇到的陷阱。开始吧!

\n\n

split() 方法:你的主要工具

\n\n

Java 中的 String 类提供了两个重载版本的 split() 方法:

\n\n
public String[] split(String regex)\npublic String[] split(String regex, int limit)
\n\n

第一个版本接受一个正则表达式并返回一个字符串数组。第二个版本功能相同,但增加了对结果部分数量的限制。听起来很简单?让我们看一些示例。

\n\n

基本示例:按空格分割

\n\n
public class SplitExample {\n    public static void main(String[] args) {\n        String text = "Java 分割字符串很容易";\n        String[] words = text.split(" ");\n        \n        for (String word : words) {\n            System.out.println(word);\n        }\n    }\n}
\n\n

输出:

\n
Java\n分割\n字符串\n很容易
\n\n

有效吗?有效。但是,如果有多个连续的空格呢?那么数组中会出现空字符串。这很烦人,对吧?

\n\n

在 Java 中按逗号分割字符串(CSV)

\n\n

最常见的任务之一就是 在 Java 中按逗号分割字符串。假设你有一个 CSV 字符串:

\n\n
String csv = "苹果,梨,香蕉,橙子";\nString[] fruits = csv.split(",");\n\nfor (String fruit : fruits) {\n    System.out.println(fruit.trim()); // trim() 去除多余空格\n}
\n\n

输出:

\n
苹果\n梨\n香蕉\n橙子
\n\n

注意:我们添加了 trim(),因为在真实数据中,逗号后面经常有空格。如果不这样做,你会得到带有前导空格的 " 苹果",然后你会困惑为什么字符串不匹配。

\n\n

正则表达式:魔法与痛苦

\n\n

split() 方法接受一个正则表达式。这提供了极大的灵活性,但也需要小心谨慎。让我们看看常见的场景。

\n\n

按点号分割

\n\n

想要拆分 IP 地址 "192.168.1.1"?简单的代码 str.split(".") 不会生效。为什么?因为点号在正则表达式中是一个特殊字符,表示“任意字符”。结果你会得到一个空字符串数组。

\n\n

正确的解决方案是转义点号:

\n\n
String ip = "192.168.1.1";\nString[] parts = ip.split("\\\\."); // 双反斜杠!\n\nfor (String part : parts) {\n    System.out.println(part);\n}\n// 输出:192 168 1 1
\n\n

记住:在 Java 中,正则表达式中转义需要使用双反斜杠 \\\\。单个 \\ 是字符串的转义字符,而双反斜杠才是用于正则表达式的。

\n\n

按多个分隔符分割

\n\n

如果字符串同时包含逗号、分号和空格怎么办?使用方括号内的字符类:

\n\n
String messy = "苹果;梨,香蕉 橙子";\nString[] items = messy.split("[;,\\\\s]+"); // ; 或 , 或空白字符\n\nfor (String item : items) {\n    System.out.println(item);\n}\n// 输出:苹果 梨 香蕉 橙子
\n\n

符号 + 表示“一个或多个”——这确保分隔符序列不会

博客

书籍推荐