You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何将String转换为Array/ArrayList?附已尝试实现代码

问题背景

需要将格式示例为[15, 52, 94, 20, 92, 109]的字符串转换为存储Byte类型的Array/ArrayList,原有实现运行不符合预期。

原有代码的核心错误
  • 字符串截取逻辑错误:substring(i, i)返回值永远为空字符串,无法获取当前遍历位置的字符,单字符截取应使用substring(i, i+1),或直接通过charAt(i)获取当前字符
  • 字符串比较逻辑错误:使用==判断逗号,Java中字符串值比较必须使用equals方法,==比较的是对象内存地址,该分支永远不会触发
  • 边界处理缺失:仅移除了字符串开头的[,未处理末尾的],且循环结束后缓存的最后一个数字没有加入列表,会丢失最后一位数据
  • 冗余逻辑:空格和逗号的分支处理逻辑完全重复,无需拆分两个判断分支
修正后的逐字符遍历实现

基于原有代码逻辑修正后的可运行版本:

import java.util.ArrayList;
import java.util.Scanner;

public class StrToByteList {
    public static void main(String[] args) {
        ArrayList<Byte> sdata = new ArrayList<>();
        Scanner input = new Scanner(System.in);
        System.out.println("Enter Data: ");
        String bytes = input.nextLine();
        // 同时移除首尾的左右中括号
        String validContent = bytes.substring(1, bytes.length() - 1);
        StringBuilder numCache = new StringBuilder();

        for (int i = 0; i < validContent.length(); i++) {
            char currentChar = validContent.charAt(i);
            if (currentChar == ',') {
                // 遇到逗号时将缓存的数字转byte存入列表,清空缓存
                sdata.add((byte) Integer.parseInt(numCache.toString().trim()));
                numCache.setLength(0);
            } else if (currentChar != ' ') {
                // 非逗号、非空格的字符拼入数字缓存
                numCache.append(currentChar);
            }
        }
        // 补存最后一个未处理的数字
        if (numCache.length() > 0) {
            sdata.add((byte) Integer.parseInt(numCache.toString().trim()));
        }

        // 输出验证结果
        System.out.println(sdata);
    }
}
简洁实现方案

如果不需要手动实现逐字符遍历逻辑,可以直接用字符串分割+流处理实现,代码更简洁:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
import java.util.stream.Collectors;

public class QuickConvert {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("Enter Data: ");
        String source = input.nextLine();
        ArrayList<Byte> sdata = Arrays.stream(
                // 移除首尾括号后按逗号分割字符串
                source.substring(1, source.length() - 1).split(",")
        )
        .map(String::trim)
        .map(num -> (byte) Integer.parseInt(num))
        .collect(Collectors.toCollection(ArrayList::new));

        System.out.println(sdata);
    }
}

注意:以上实现默认输入字符串严格符合示例格式,若存在格式异常需要额外加异常捕获逻辑,避免Integer.parseInt抛出数字格式错误。

内容的提问来源于stack exchange,提问作者AH1309

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 21:54:20