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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 06:24:03