Java中比较字符串首字符与另一字符串第5字符并校验的报错求助
问题与代码修正
需求与问题
我是Java初学者,需要实现将姓氏(surname)的首字符与Pan Card的第5个字符进行比较,判断是否相同并输出“有效”或“无效”。当前运行代码时出现IndexOutOfBoundsException(索引越界异常),且有时会错误输出“无效”结果。
原代码
import java.util.*; public class Pancardletter { public static void main(String[] args) { // TODO Auto-generated method stub String s; String surname=""; System.out.println("Enter pan card number"); Scanner sc=new Scanner(System.in); s=sc.nextLine(); System.out.println("Enter your surname"); surname=sc.nextLine(); char[] ch=new char[s.length()]; char[] ch1=new char[surname.length()]; for(int i=0;i<s.length();i++) { for(int j=0;j<surname.length()-1;j++) { if(Character.toLowerCase(s.charAt(4)) ==surname.charAt(0)) { System.out.println("This is a valid pan card"); }else { System.out.println("Invalid pancard..."); } } } } }
问题分析与修改点
- 索引越界问题:未校验输入的Pan卡号长度是否≥5位、姓氏是否为空,直接访问
s.charAt(4)或surname.charAt(0)会触发异常,需先做输入合法性检查。 - 多余嵌套循环:外层遍历Pan卡号所有字符、内层遍历姓氏长度-1次,会重复输出多次结果,完全没必要,只需一次判断即可。
- 大小写匹配问题:仅将Pan卡字符转小写,未处理姓氏首字符的大小写,导致大小写不一致时误判(如姓氏首字符为
A,Pan卡字符为a会被判定无效)。 - 重复输出问题:每次循环都会输出结果,正确逻辑应只判断一次,输出一次“有效”或“无效”。
修正后的代码
import java.util.Scanner; public class Pancardletter { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("Enter pan card number"); String panNumber = sc.nextLine(); System.out.println("Enter your surname"); String surname = sc.nextLine(); // 输入合法性校验 if (panNumber.length() < 5 || surname.isEmpty()) { System.out.println("Invalid input: Pan卡号长度需至少5位,姓氏不能为空"); sc.close(); return; } // 统一转小写后比较 char panFifthChar = Character.toLowerCase(panNumber.charAt(4)); char surnameFirstChar = Character.toLowerCase(surname.charAt(0)); if (panFifthChar == surnameFirstChar) { System.out.println("This is a valid pan card"); } else { System.out.println("Invalid pancard..."); } sc.close(); } }
内容的提问来源于stack exchange,提问作者Animesh Naik
相关产品推荐
相关产品推荐

