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

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. 遍历输入字符串的每一位字符
  2. 连字符-直接保留,不需要转换
  3. 数字位处理规则:
    • 先判断当前数字的奇偶性
    • 随机选择加1或者减1实现奇偶翻转,遇到边界值(0、9)时做兼容:0只能加1变1,9只能减1变8
    • 避免所有转换后数字固定为同一个值
  4. 拼接所有处理后的字符输出最终结果

完整代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:36:02