Java如何查找含特定字符的列表元素位置并提取姓名首字母
解决方法
原代码存在的问题
- 输出逻辑错误:
contains()方法返回的是布尔值(true/false),你现在打印的是两个判断结果,不是需要的首字母组合 - else分支逻辑错误:第一个不符合条件的元素就会触发
return "",直接终止整个方法,后续符合条件的元素完全不会被遍历到 - 你已经通过循环下标
i拿到了当前元素的位置,不需要额外查找位置,满足筛选条件时的i就是对应元素的下标,直接用i获取对应姓名的姓、名取首字母即可
正确实现代码
直接打印结果版本
// 提示语放在循环外避免重复打印 System.out.println("所有名包含字符a或e的姓名对应的首字母组合:"); for (int i = 0; i < regst.size(); i++) { String firstName = regst.getName(i).getFirstName(); // 如果需要不区分大小写匹配,可修改为 firstName.toLowerCase().contains("a"),e的判断同理 if (firstName.contains("a") || firstName.contains("e")) { // 取首字母:名的第一个字符 + 姓的第一个字符 String initials = String.valueOf(firstName.charAt(0)) + String.valueOf(regst.getName(i).getLastName().charAt(0)); // 可同时输出元素位置和对应首字母组合 System.out.printf("下标位置%d:%s%n", i, initials); } }
收集结果返回版本
如果需要把符合条件的首字母和位置统一收集后返回,可参考如下写法:
public List<String> getFilteredInitials() { List<String> resultList = new ArrayList<>(); // 如果需要同时保存符合条件的元素位置,可额外定义List<Integer> indexList = new ArrayList<>(); for (int i = 0; i < regst.size(); i++) { String firstName = regst.getName(i).getFirstName(); if (firstName.contains("a") || firstName.contains("e")) { String initials = String.valueOf(firstName.charAt(0)) + String.valueOf(regst.getName(i).getLastName().charAt(0)); resultList.add(initials); // 要存位置的话这里加 indexList.add(i); } } return resultList; }
补充说明
如果要兼容名/姓为空的边界场景,可以在取charAt(0)之前增加非空和长度判断,避免下标越界异常。
内容的提问来源于stack exchange,提问作者user15846058
相关产品推荐
相关产品推荐

