如何在Java中将用户输入的两位字母国家代码按字母表位置转换为数字
实现方案
整个逻辑非常轻量,不需要引入任何第三方依赖,纯JDK就能完成,核心思路拆成四步走:
- 先做输入合法性校验,避免非法值导致程序抛出不友好的底层报错
- 把输入的两位代码统一转成大写,兼容用户不小心输小写的场景
- 逐字符计算每个字母对应的表中序号:利用ASCII码的偏移特性,大写
A的ASCII值是固定的,字符减去'A'的偏移再加1,就能直接得到1-26的对应序号,不用手写A-Z的映射表 - 把两个计算好的序号直接作为字符串拼接,不要做数值计算,最后返回拼接好的结果就行
可直接复用的代码
写了个新手也能看懂的工具类,复制过去就能跑:
public class CountryCodeTool { /** * 两位字母国家代码转拼接数字 * @param rawCode 用户输入的两位国家代码 * @return 规则对应的拼接数字字符串 */ public static String convertCode(String rawCode) { // 基础长度校验 if (rawCode == null || rawCode.length() != 2) { throw new IllegalArgumentException("请输入长度为2的字母国家代码"); } String upperCode = rawCode.toUpperCase(); StringBuilder res = new StringBuilder(); for (char c : upperCode.toCharArray()) { // 字符合法性校验 if (c < 'A' || c > 'Z') { throw new IllegalArgumentException("输入包含非字母字符:" + c); } // 计算字母在拉丁字母表的位置 int pos = c - 'A' + 1; res.append(pos); } return res.toString(); } public static void main(String[] args) { // 跑示例FR测试用例 System.out.println(convertCode("FR")); // 输出618,和预期完全一致 System.out.println(convertCode("fr")); // 兼容小写输入,同样输出618 System.out.println(convertCode("BJ")); // 测试边界:B=2, J=10,输出210 } }
新手容易踩的坑
- 最容易错的点:别想着把两个序号加起来凑数字,比如FR算出来6和18,做加法得到24就完全错了,必须是字符串层面的直接拼接
- 别省掉校验逻辑:用户可能输3位、输带数字的内容,提前做校验抛出明确的提示,比让程序抛个空指针、数组越界好用太多
- 不用写A到Z的硬编码映射表:靠ASCII偏移算出来的结果和硬编码完全一致,代码更简洁也不会出漏
内容的提问来源于stack exchange,提问作者404uname
相关产品推荐
相关产品推荐

