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

Java代码报错:String[]无法转换为String,求解决方法

问题分析与解决

直接报错原因

  1. 类型不匹配:letters[i][i] 是单个String类型变量,但strs[i].split("")返回的是String[]数组,把数组赋值给单个字符串变量,必然触发类型转换错误。
  2. 数组未初始化:String[][] letters; 仅声明了二维数组但未分配内存空间,直接访问letters[i]会抛出空指针异常。

代码修正步骤

第一步:修复数组初始化与赋值

把二维数组的声明和初始化结合,同时修正赋值语句,让每个字符串拆分后的字符数组对应二维数组的一行:

// 初始化二维数组,长度等于strs的元素个数
String[][] letters = new String[strs.length][];
for (int i = 0; i < strs.length; i++) {
    // 将每个字符串拆分后的字符数组赋值给二维数组的第i行
    letters[i] = strs[i].split("");
}

第二步:修正最长公共前缀的逻辑错误

原代码的比较逻辑存在多处问题:用==比较字符串(会比较引用而非内容)、k++导致索引跳步、未正确收集公共前缀、cmon未初始化等。以下是修正后的完整代码:

class Solution {
    public String longestCommonPrefix(String[] strs) {
        // 处理边界情况:空数组直接返回空
        if (strs == null || strs.length == 0) {
            return "";
        }
        
        String[][] letters = new String[strs.length][];
        for (int i = 0; i < strs.length; i++) {
            letters[i] = strs[i].split("");
        }
        
        // 用StringBuilder拼接公共前缀,效率更高
        StringBuilder cmon = new StringBuilder();
        // 以第一个字符串的长度为基准遍历每个字符位置
        for (int j = 0; j < letters[0].length; j++) {
            // 检查所有字符串在j位置的字符是否一致
            boolean isCommon = true;
            for (int k = 1; k < letters.length; k++) {
                // 如果当前字符串长度不足j,或者字符不相等,标记为不公共
                if (j >= letters[k].length || !letters[k][j].equals(letters[0][j])) {
                    isCommon = false;
                    break;
                }
            }
            if (isCommon) {
                cmon.append(letters[0][j]);
            } else {
                // 遇到不公共的字符,直接终止循环
                break;
            }
        }
        return cmon.toString();
    }
}

额外说明

  • 加入了空数组等边界情况处理,避免运行时异常。
  • 使用StringBuilder代替字符串拼接,减少内存开销。
  • 一旦发现某个位置的字符不公共,立即终止循环,提升执行效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 06:15:27