按特定分隔符分割字符串(最常见)
这是最常见的需求,比如将 "apple,banana,orange" 分割成 ["apple", "banana", "orange"]。

方法:String.split()
String 类的 split(String regex) 方法是专门为此设计的,它接受一个正则表达式作为分隔符,并返回一个字符串数组。
核心要点:
split()方法使用的是正则表达式,而不是简单的字符,如果你的分隔符是正则表达式中的特殊字符(如[\^]),你需要用\\对其进行转义。- 该方法会丢弃匹配到的分隔符本身。
示例 1:用逗号分隔
public class StringToArrayExample {
public static void main(String[] args) {
String str = "apple,banana,orange,grape";
// 使用逗号作为分隔符
String[] fruitsArray = str.split(",");
// 打印数组内容
for (String fruit : fruitsArray) {
System.out.println(fruit);
}
// 输出:
// apple
// banana
// orange
// grape
}
}
示例 2:用空格分隔
String str = "Java is a popular programming language";
String[] wordsArray = str.split(" "); // 用空格分隔
// 输出: ["Java", "is", "a", "popular", "programming", "language"]
示例 3:用句号()分隔(需要转义)
在正则表达式中表示“任意字符”,所以必须用 \\ 转义。
String str = "www.example.com";
// 错误示范: str.split(".") 会把每个字符都分割开,因为 "." 匹配任意字符
// 正确做法:
String[] partsArray = str.split("\\.");
// 输出: ["www", "example", "com"]
示例 4:处理连续的分隔符
默认情况下,连续的分隔符会产生空字符串()。"a,,b" 分割后是 ["a", "", "b"]。

如果你希望忽略空字符串,可以使用 split(String regex, int limit) 方法的第二个参数 limit,将其设为负数。
String str = "a,,b,c,,d";
// 默认行为,包含空字符串
String[] arrayWithEmpty = str.split(",");
// 输出: ["a", "", "b", "c", "", "d"]
// 忽略空字符串
String[] arrayWithoutEmpty = str.split(",", -1); // limit < 0 表示丢弃尾部的空字符串
// 输出: ["a", "", "b", "c", "", "d"] (和上面一样,因为空字符串在中间)
// 更好的方式是使用正则表达式中的 + 量词,表示一个或多个
String[] cleanArray = str.split(",+");
// 输出: ["a", "b", "c", "d"] (这是最常用的方式)
// 如果分隔符是混合的,比如逗号或空格
String strMixed = "a, b c, d";
String[] mixedArray = strMixed.split("[, ]+"); // [] 表示字符集,+ 表示一个或多个
// 输出: ["a", "b", "c", "d"]
将字符串的每个字符都作为数组的一个元素
将 "hello" 转换为 ["h", "e", "l", "l", "o"]。
方法 1:String.split("")
直接使用 split("") 会将每个字符都分割开,但有一个特殊情况:如果字符串开头有一个分隔符,数组第一个元素会是空字符串。
String str = "hello";
// 方法 1: split("")
String[] charArray1 = str.split("");
// 输出: ["h", "e", "l", "l", "o"]
String strWithLeadingSep = ",hello";
String[] charArray2 = strWithLeadingSep.split("");
// 输出: ["", "h", "e", "l", "l", "o"]
方法 2:String.toCharArray() (推荐)
这个方法更直观、更高效,它将字符串转换成一个字符数组 (char[]),如果你需要的是 String[],可以再遍历 char[] 来转换。

String str = "hello";
// 1. 先转换为字符数组
char[] charArray = str.toCharArray();
// 输出: ['h', 'e', 'l', 'l', 'o']
// 2. 如果需要 String[],可以手动转换
String[] stringArray = new String[charArray.length];
for (int i = 0; i < charArray.length; i++) {
stringArray[i] = String.valueOf(charArray[i]);
}
// 输出: ["h", "e", "l", "l", "o"]
对于这种需求,toCharArray() 通常是更好的选择。
将整个字符串作为数组的唯一一个元素
将 "hello world" 转换为 ["hello world"]。
方法:使用花括号初始化
这是最简单直接的方法。
String str = "hello world";
// 创建一个新数组,将 str 作为第一个元素
String[] array = { str };
// 或者使用 new 关键字
String[] array2 = new String[] { str };
// 输出: ["hello world"]
将字符串按固定长度分割
将 "1234567890" 每 3 个字符分割一次,得到 ["123", "456", "789", "0"]。
String.split() 无法直接实现这个功能,需要手动处理。
方法:使用循环和 String.substring()
public class SplitByLength {
public static void main(String[] args) {
String str = "1234567890";
int chunkSize = 3;
// 计算数组长度
int arrayLength = (int) Math.ceil((double) str.length() / chunkSize);
String[] chunks = new String[arrayLength];
// 填充数组
for (int i = 0; i < arrayLength; i++) {
int start = i * chunkSize;
int end = Math.min((i + 1) * chunkSize, str.length());
chunks[i] = str.substring(start, end);
}
// 打印结果
for (String chunk : chunks) {
System.out.println(chunk);
}
// 输出:
// 123
// 456
// 789
// 0
}
}
总结与推荐
| 你的需求 | 推荐方法 | 示例 |
|---|---|---|
| 按特定字符(如 ` `)分割 | String.split(",") |
str.split(",") |
| 按特定字符(如 )分割(特殊字符) | String.split("\\.") |
str.split("\\|") |
| 按多个可能的字符(如逗号或空格)分割 | String.split("[, ]+") |
str.split("[, ]+") |
| 按连续分隔符分割并忽略空字符串 | String.split(",+") |
str.split(",+") |
| 将每个字符作为元素 | String.toCharArray() (然后转为 String[]) |
str.toCharArray() |
| 将整个字符串作为数组唯一元素 | 使用花括号初始化 | new String[] { str } |
| 按固定长度分割 | 循环 + String.substring() |
for 循环处理 |
对于绝大多数情况,String.split() 是你的首选工具,请务必记住它使用的是正则表达式,并根据你的分隔符是否为特殊字符来决定是否需要转义。
