Java查找数组最长字符串索引报“cannot find symbol”错误求助
解决数组中最长字符串索引查找的"cannot find symbol"错误
嘿,我来帮你搞定这个问题!你遇到的cannot find symbol错误,核心原因很明确:Java中的数组本身并没有indexOf()方法——这个方法是List集合类的专属方法,直接在数组上调用它,编译器自然找不到对应的符号啦。
先看你现有的getLongString方法,它能正确找到数组中最长的字符串,但如果要获取这个字符串在原数组中的索引,我们可以用两种更靠谱的方式来实现:
方案一:遍历过程中直接记录索引(推荐,更高效)
既然我们在找最长字符串的时候已经遍历了数组,不如顺便把它的索引也记录下来,这样不用二次遍历,效率更高。可以写一个专门获取索引的方法,或者修改原方法同时返回字符串和索引:
public class Final21 { public static String getLongString(String[] array) { // 给原方法补充空数组判断,避免空指针 if (array == null || array.length == 0) { return null; } int maxLength = 0; String longString = null; for (String s : array) { if (s.length() > maxLength) { maxLength = s.length(); longString = s; } } return longString; } // 新增获取最长字符串索引的方法 public static int getLongStringIndex(String[] array) { if (array == null || array.length == 0) { return -1; // 空数组返回-1,避免报错 } int maxLength = 0; int longIndex = 0; // 使用普通for循环,方便拿到当前元素的索引 for (int i = 0; i < array.length; i++) { String current = array[i]; if (current.length() > maxLength) { maxLength = current.length(); longIndex = i; // 同步更新索引 } } return longIndex; } // 你的getShortString方法可以继续在这里补充 }
方案二:先拿到最长字符串,再遍历数组找索引
如果一定要基于你现有的getLongString方法来实现,我们可以手动遍历数组匹配字符串:
public static int findLongStringIndex(String[] array) { String longStr = getLongString(array); if (longStr == null) { return -1; } // 遍历数组找匹配的字符串 for (int i = 0; i < array.length; i++) { // 注意用equals比较字符串内容,不要用== if (longStr.equals(array[i])) { return i; } } return -1; // 理论上不会走到这里,除非数组为空 }
额外小技巧:转成List使用indexOf
如果你不想手动写遍历,也可以把数组转换成List,然后调用List的indexOf()方法:
import java.util.Arrays; // 在需要的地方调用 String longStr = getLongString(array); int index = Arrays.asList(array).indexOf(longStr);
不过要注意:如果数组中有多个长度相同的最长字符串,上述所有方法都会返回第一个出现的那个字符串的索引;如果需要返回最后一个,只需要把判断条件从>改成>=即可。
内容的提问来源于stack exchange,提问作者CaptainMuffenz
相关产品推荐
相关产品推荐

