如何检查字符串指定位置的字符是否与数组元素匹配并获取对应索引
原代码问题梳理
- 类型不匹配:原代码中
numbers数组存储的是int类型的0-9,而字符串中取出的数字是char类型的'0'-'9',二者ASCII值相差48,直接比对永远不匹配 - 逻辑错误:原代码内层用字符串的遍历索引
i去取numbers[i],当字符串长度超过10时会触发数组越界,且indexOf的返回值没有存储,没有实现记录匹配位置的需求 - 语法错误:方法声明为返回String类型,但整个方法没有return语句,无法通过编译
- 长度校验错误:原代码仅判断长度≥7,不符合你提出的5-7个字符的输入要求
正确实现(贴合你的原有思路)
完全按照你「遍历字符+和数组元素比对」的逻辑调整,兼容你当前的学习进度:
import java.util.ArrayList; import java.util.List; // 方法返回值改为存储匹配索引的Integer列表 static List<Integer> Registration(String reg) { List<Integer> matchIndexes = new ArrayList<>(); // 数字数组改为char类型,和字符串取出的字符类型对齐 char[] numbers = {'0', '1', '2', '3', '4', '5', '6', '7' , '8', '9'}; // 校验输入长度为5-7位 if (reg.length() < 5 || reg.length() > 7) { return matchIndexes; } // 遍历字符串每一位 for (int strIndex = 0; strIndex < reg.length(); strIndex++) { char currentChar = reg.charAt(strIndex); // 和数字数组逐个比对 for (char num : numbers) { if (currentChar == num) { // 匹配成功则存储当前字符在字符串中的索引 matchIndexes.add(strIndex); break; } } } return matchIndexes; }
简化实现
如果不需要强制用数组比对的逻辑,可以直接用Java内置的字符数字判断方法,省去内层循环:
import java.util.ArrayList; import java.util.List; static List<Integer> Registration(String reg) { List<Integer> matchIndexes = new ArrayList<>(); if (reg.length() < 5 || reg.length() > 7) { return matchIndexes; } for (int i = 0; i < reg.length(); i++) { if (Character.isDigit(reg.charAt(i))) { matchIndexes.add(i); } } return matchIndexes; }
测试效果
输入示例H3llo时,返回的列表值为[1],即索引为1的位置匹配到了数字,符合你的需求。
内容的提问来源于stack exchange,提问作者ItchyPrune
相关产品推荐
相关产品推荐

