在 Java 中,将一个 String
转换为数组,常见的有以下几种需求和对应做法:
1. 转换为字符数组 (char[]
)
如果你需要把字符串的每个字符作为一个元素存入数组,可以使用
String s = "Hello, 世界"; char[] chars = s.toCharArray();
-
优势:最简单、直接。
-
应用场景:逐字符处理、密码学、字符级遍历。
2. 按分隔符拆分为字符串数组 (String[]
)
当你想根据某个分隔符(或正则)把字符串拆分为若干子串时,使用 String.split(...)
:
String csv = "apple,banana,orange";
String[] fruits = csv.split(",");
// 结果:["apple", "banana", "orange"]
-
支持正则:比如拆分多种符号
.
,|
等String line = "a.b|c;d"; String[] parts = line.split("[.\\|;]");
-
注意空项:连续分隔符会产生空字符串,或使用带 limit 的重载。
3. 转换为字节数组 (byte[]
)
如果你想要字符串的底层字节(例如进行网络或文件 I/O),可以指定字符集:
String s = "Hello";
byte[] utf8 = s.getBytes(StandardCharsets.UTF_8);
// 或者指定编码名称:
// byte[] gbk = s.getBytes("GBK");
-
用途:网络传输、文件存储、加密。
4. 按固定长度切分
把字符串按指定长度切成若干块,放入数组:
public static String[] chunk(String s, int chunkSize) {
int len = (s.length() + chunkSize - 1) / chunkSize;
String[] arr = new String[len];
for (int i = 0; i < len; i++) {
int start = i * chunkSize;
int end = Math.min(start + chunkSize, s.length());
arr[i] = s.substring(start, end);
}
return arr;
}
5. 按每个 Unicode 码点拆分
对于包含补充平面符号(如 Emoji)的字符串,单纯 toCharArray()
可能把一个码点拆成两个 char
。如果要保持码点完整,可以这样:
String s = "A😊B";
int[] codePoints = s.codePoints().toArray();
// codePoints 里每个元素是一个 Unicode 码点
String[] letters = Arrays.stream(codePoints)
.mapToObj(cp -> new String(Character.toChars(cp)))
.toArray(String[]::new);
// 结果:["A", "😊", "B"]
小结
-
toCharArray()
—— 字符数组 -
split(...)
—— 按分隔符或正则拆分为字符串数组 -
getBytes(...)
—— 字节数组 -
自定义切分逻辑 —— 固定长度或复杂规则
-
codePoints()
—— 以 Unicode 码点为单位拆分