在 Java 中,将字符串(String)转换为数组(Array)有多种常见方式,具体取决于你想要的数组类型(如 char[]、String[]、byte[] 等),以下是几种典型场景的详细说明和代码示例:

字符串转换为字符数组(char[])
这是最直接的方式,使用 String.toCharArray() 方法。
String str = "Hello"; char[] charArray = str.toCharArray(); // 转换为 char 数组 System.out.println(Arrays.toString(charArray)); // 输出: [H, e, l, l, o]
字符串按分隔符拆分为字符串数组(String[])
使用 String.split() 方法,通过指定分隔符(如逗号、空格等)将字符串拆分为 String[]。
示例1:按逗号拆分
String str = "apple,banana,orange";
String[] strArray = str.split(","); // 按逗号拆分
System.out.println(Arrays.toString(strArray)); // 输出: [apple, banana, orange]
示例2:按空格拆分(处理连续空格)
String str = " Java is fun ";
String[] strArray = str.split("\\s+"); // 按一个或多个空格拆分
System.out.println(Arrays.toString(strArray)); // 输出: [Java, is, fun]
注意事项:
split()的参数是正则表达式, 或 等特殊字符需要转义(如\\.)。- 如果字符串开头或结尾有分隔符,可能会得到空字符串,可用
split("\\s+", -1)保留空字符串。
字符串转换为字节数组(byte[])
使用 String.getBytes() 方法,需指定字符编码(如 UTF-8)。
String str = "Hello"; byte[] byteArray = str.getBytes(StandardCharsets.UTF_8); System.out.println(Arrays.toString(byteArray)); // 输出: [72, 101, 108, 108, 111]
字符串转换为其他类型的数组(如 int[])
需要先拆分为 String[],再逐个转换为目标类型。
示例:字符串转 int[]
String str = "1,2,3,4,5";
String[] strArray = str.split(",");
int[] intArray = new int[strArray.length];
for (int i = 0; i < strArray.length; i++) {
intArray[i] = Integer.parseInt(strArray[i]);
}
System.out.println(Arrays.toString(intArray)); // 输出: [1, 2, 3, 4, 5]
使用 Java 8 Stream 简化代码:
String str = "1,2,3,4,5";
int[] intArray = Arrays.stream(str.split(","))
.mapToInt(Integer::parseInt)
.toArray();
System.out.println(Arrays.toString(intArray)); // 输出: [1, 2, 3, 4, 5]
字符串转换为自定义对象数组
如果需要将字符串转换为自定义对象的数组,可以结合 split() 和构造函数。
示例:字符串转 Person 对象数组
class Person {
String name;
int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return name + ":" + age;
}
}
String str = "Alice:25,Bob:30";
String[] parts = str.split(",");
Person[] people = new Person[parts.length];
for (int i = 0; i < parts.length; i++) {
String[] data = parts[i].split(":");
people[i] = new Person(data[0], Integer.parseInt(data[1]));
}
System.out.println(Arrays.toString(people)); // 输出: [Alice:25, Bob:30]
常见问题与解决方案
-
NullPointerException- 确保字符串不为
null,或先检查:if (str != null) { /* 转换逻辑 */ }
- 确保字符串不为
-
NumberFormatException- 转换数字时,确保字符串内容有效:
try { int num = Integer.parseInt(str); } catch (NumberFormatException e) { System.err.println("无效数字格式"); }
- 转换数字时,确保字符串内容有效:
-
正则表达式特殊字符
- 拆分时对 、、 等字符转义:
String[] parts = str.split("\\."); // 拆分点号
- 拆分时对 、、 等字符转义:
| 目标类型 | 方法示例 |
|---|---|
char[] |
str.toCharArray() |
String[] |
str.split(",") |
byte[] |
str.getBytes(StandardCharsets.UTF_8) |
int[] |
Arrays.stream(str.split(",")).mapToInt(Integer::parseInt).toArray() |
| 自定义对象数组 | 结合 split() 和构造函数手动转换 |
根据实际需求选择合适的方法,注意处理异常和边界情况。
