杰瑞科技汇

Java String如何转为数组?

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

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

字符串转换为字符数组(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]

常见问题与解决方案

  1. NullPointerException

    • 确保字符串不为 null,或先检查:
      if (str != null) { /* 转换逻辑 */ }
  2. NumberFormatException

    • 转换数字时,确保字符串内容有效:
      try {
          int num = Integer.parseInt(str);
      } catch (NumberFormatException e) {
          System.err.println("无效数字格式");
      }
  3. 正则表达式特殊字符

    • 拆分时对 、、 等字符转义:
      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() 和构造函数手动转换

根据实际需求选择合适的方法,注意处理异常和边界情况。

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