Java如何实现指定格式字符串中的奇偶数字互相转换
需求说明
给定一个字符串,需将其中的每一位奇数转为偶数、偶数转为奇数。本次处理的社会安全号码(social security number)在第3位和第6位位置后带有连字符-,要求输出转换后的新号码。
示例输入
472-19-1267
示例输出
583-28-2378
现有代码片段
Scanner input = new Scanner(System.in); System.out.println("Please enter your social security number "); String social = input.nextLine(); for(int i = 0; i< social.length(); i++){ char c = social.charAt(i); }
补充规则
- 转换时数字加1或减1均可自由选择
- 输入为符合
XXX-XX-XXXX格式的任意社会安全号码 - 转换后的数字需要随机,不能全部转为同一个数字(例如不能全部转为1)
完整实现方案
实现逻辑
- 遍历输入字符串的每一位字符
- 连字符
-直接保留,不需要转换 - 数字位处理规则:
- 先判断当前数字的奇偶性
- 随机选择加1或者减1实现奇偶翻转,遇到边界值(0、9)时做兼容:0只能加1变1,9只能减1变8
- 避免所有转换后数字固定为同一个值
- 拼接所有处理后的字符输出最终结果
完整代码
import java.util.Random; import java.util.Scanner; public class SsnConverter { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("请输入社会安全号码:"); String social = input.nextLine(); Random random = new Random(); StringBuilder result = new StringBuilder(); for (int i = 0; i < social.length(); i++) { char c = social.charAt(i); if (c == '-') { result.append(c); continue; } int num = Character.getNumericValue(c); int converted; // 处理边界值 if (num == 0) { converted = 1; } else if (num == 9) { converted = 8; } else { // 随机选择加1或者减1 converted = random.nextBoolean() ? num + 1 : num - 1; } result.append(converted); } System.out.println("转换后的号码:" + result); input.close(); } }
效果验证
输入示例的472-19-1267时,可能输出和示例一致的583-28-2378,也可能输出其他符合奇偶翻转规则的结果,满足随机要求。
内容的提问来源于stack exchange,提问作者jjklsfdkk
相关产品推荐
相关产品推荐

