Java代码报错:String[]无法转换为String,求解决方法
问题分析与解决
直接报错原因
- 类型不匹配:
letters[i][i]是单个String类型变量,但strs[i].split("")返回的是String[]数组,把数组赋值给单个字符串变量,必然触发类型转换错误。 - 数组未初始化:
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
相关产品推荐
相关产品推荐

