杰瑞科技汇

Java字符串如何转字符串数组?

按特定分隔符分割字符串(最常见)

这是最常见的需求,比如将 "apple,banana,orange" 分割成 ["apple", "banana", "orange"]

Java字符串如何转字符串数组?-图1
(图片来源网络,侵删)

方法: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"]

Java字符串如何转字符串数组?-图2
(图片来源网络,侵删)

如果你希望忽略空字符串,可以使用 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[] 来转换。

Java字符串如何转字符串数组?-图3
(图片来源网络,侵删)
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() 是你的首选工具,请务必记住它使用的是正则表达式,并根据你的分隔符是否为特殊字符来决定是否需要转义。

分享:
扫描分享到社交APP
上一篇
下一篇