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
相关产品推荐
相关产品推荐

