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
相关产品推荐
相关产品推荐

