如何忽略大小写比较ArrayList与String?解决Dog类方法调用报错问题
问题解答
1. 忽略大小写比较ArrayList元素与String的方法
核心思路是根据ArrayList中元素的类型,提取对应的字符串内容后再做忽略大小写匹配:
- 如果ArrayList存储的是
String类型:直接遍历每个元素,调用element.equalsIgnoreCase(targetString)就能完成忽略大小写的比较。 - 如果是自定义对象(比如你提到的
Dog类):需要先获取对象中的字符串属性(比如Dog的name),再拿这个属性和目标字符串做忽略大小写的对比。
2. 解决".equalsIgnoreCase对于Dog类型未定义"的报错
这个报错原因很明确——equalsIgnoreCase是String类的专属方法,Dog类本身并没有定义这个方法,所以你不能直接调用dogs.get(i).equalsIgnoreCase(toFind)。
不用equalsIgnoreCase也能实现忽略大小写查找,不过更合理的方式是先获取Dog的名字属性(毕竟你要找的应该是名字匹配的狗狗吧?),再通过字符串的大小写转换来对比。当然也可以直接用equalsIgnoreCase对比名字和目标字符串,这种方式反而更稳妥。
修改后的代码示例
public static int findDog(String toFind, ArrayList<Dog> dogs) { // 统一转换为小写,避免循环中重复转换 String targetName = toFind.toLowerCase(); for (int i = 0 ; i < dogs.size() ; i++) { Dog currentDog = dogs.get(i); // 获取狗的名字并转小写,和目标字符串对比 if (currentDog.getName().toLowerCase().equals(targetName)) { return i; } } return -1; }
关键补充说明
- 上面的代码假设
Dog类有getName()方法来获取名字属性(既然构造函数里包含name参数,你肯定需要给它加一个Getter方法),如果还没添加,记得在Dog类中补上:public class Dog { private String name; private double age; private double weight; public Dog(String name, double age, double weight) { this.name = name; this.age = age; this.weight = weight; } // 新增获取名字的Getter方法 public String getName() { return name; } } - 如果你不想自己转大小写,直接用
equalsIgnoreCase对比名字和目标字符串会更简洁可靠(它内部已经处理了多语言大小写转换的边缘情况):if (currentDog.getName().equalsIgnoreCase(toFind)) { return i; }
内容的提问来源于stack exchange,提问作者meli
相关产品推荐
相关产品推荐

