Java如何按指定字符串值拆分数组并提取统计特定元素
原代码问题排查
- 语法错误:变量声明、数组赋值语句末尾缺失分号,
if(typesSearch.equals("Type 1999"))后多余的分号会导致判断逻辑失效,无论条件是否成立都会执行计数自增 - 逻辑错误:你遍历的是二维数组
listOfTypes,第一层循环拿到的是每一行的一维数组typesSearch,直接拿一维数组和字符串做相等判断永远返回false,缺少第二层遍历一维数组内每个元素的逻辑 - 功能缺失:没有定义存储匹配元素的容器,无法生成只包含指定型号的新数组
正确实现方案
1. 基础循环实现(兼容所有Java版本)
// 定义要匹配的目标型号 String targetType = "Type 1999"; // 用动态集合存储匹配到的元素,不需要提前计算长度 List<String> matchedList = new ArrayList<>(); // 遍历二维数组 for (int i = 0; i < listOfTypes.length; i++) { String[] row = listOfTypes[i]; if (row != null) { // 第二层遍历当前行的每个元素 for (int j = 0; j < row.length; j++) { String current = row[j]; // 匹配成功就存入集合 if (targetType.equals(current)) { matchedList.add(current); } } } } // 集合转成目标数组 String[] resultArray = matchedList.toArray(new String[0]); // 直接取数组长度就是出现次数 int count = resultArray.length;
运行后得到的resultArray就是你需要的仅包含指定型号的数组,你的示例输入中每行都有1个Type 1999,最终得到的数组长度为5,你问题里写的示例输出长度4属于笔误。
2. Java 8+ Stream简洁实现
String targetType = "Type 1999"; String[] resultArray = Arrays.stream(listOfTypes) .filter(Objects::nonNull) // 过滤空行 .flatMap(Arrays::stream) // 把二维数组展开成一维元素流 .filter(targetType::equals) // 匹配目标型号 .toArray(String[]::new); // 转成数组 int count = resultArray.length;
内容的提问来源于stack exchange,提问作者Prot0139
相关产品推荐
相关产品推荐

