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

Java程序无法提取名字首2位与姓氏尾2位字符,求故障排查

问题原因与修复方案:无法正确提取名字前两位和姓氏后两位

你的代码核心问题出在字符相加的逻辑上:charAt()方法返回的是char类型值,直接对两个char做加法运算时,Java会将它们转换成对应的ASCII码数值进行求和,而不是拼接字符。比如输入名字是"Alice",firstName.charAt(0) + firstName.charAt(1)就是'a'+'l'(97+108=205),转成字符串后变成"205",而不是你期望的"al"。

修复方案

有两种简单的修复方式:

1. 使用substring直接截取(推荐,更简洁可靠)

String类的substring方法可以直接截取指定范围的子串,完美适配你的需求:

// 获取名字前两位
String firstPart = firstName.substring(0, 2);
// 获取姓氏最后两位
String secondPart = lastName.substring(lastName.length() - 2);

2. 将单个字符转为字符串后再拼接

如果想保留基于charAt的写法,需要把每个char单独转为字符串,再做拼接操作:

String firstPart = String.valueOf(firstName.charAt(0)) + String.valueOf(firstName.charAt(1));
String secondPart = String.valueOf(lastName.charAt(lastName.length() - 2)) + String.valueOf(lastName.charAt(lastName.length() - 1));

完整修复后的代码

import java.util.Scanner;
public class HW2ex2 {
    public static void main (String[] args) {
        Scanner scan = new Scanner(System.in);
        
        String firstName, lastName, yourCNP;

        System.out.println("Enter your first name: ");
        firstName = scan.nextLine();
        System.out.println("Enter your last name: ");
        lastName = scan.nextLine();
        System.out.println("Enter your CNP: ");
        yourCNP = scan.nextLine();

        firstName = firstName.toLowerCase();
        lastName = lastName.toUpperCase();
        
        // 替换为正确的截取逻辑
        String firstPart = firstName.substring(0, 2);
        String secondPart = lastName.substring(lastName.length() - 2);

        String password = firstPart + secondPart;

        System.out.println("Your password is: " + password);

        scan.close();
    }
}

额外注意点

如果需要处理用户输入的名字/姓氏长度不足2的情况,可以添加长度判断,避免StringIndexOutOfBoundsException,比如:

if (firstName.length() < 2 || lastName.length() < 2) {
    System.out.println("名字或姓氏长度不能少于2个字符");
    return;
}

内容的提问来源于stack exchange,提问作者Cristian

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 09:25:41