You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 07:03:35