华为OD机试 - 敏感字段加密(Java 2023 B卷 100分)

在这里插入图片描述

目录

    • 专栏导读
    • 一、题目描述
    • 二、输入描述
    • 三、输出描述
    • 四、解题思路
    • 五、Java算法源码
    • 六、效果展示
      • 1、输入
      • 2、输出

华为OD机试 2023B卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

给定一个由多个命令字组成的命令字符串:

  1. 字符串长度小于等于127字节,只包含大小写字母,数字,下划线和偶数个双引号;
  2. 命令字之间以一个或多个下划线 _ 进行分割;
  3. 可以通过两个双引号”来标识包含下划线 的命令字或空命令字(仅包含两个双引号的命令字),双引号不会在命令字内部出现

请对指定索引的敏感字段进行加密,替换为****** (6个*) ,并删除命令字前后多余的下划线如果无法找到指定索引的命令字,输出字符串ERROR。

二、输入描述

输入为两行,第一行为命令字索引K (从0开始) ,第二行为命令字符串S。

三、输出描述

输出处理后的命令字符串,如果无法找到指定索引的命令字,输出字符串ERROR

输入 输出 说明
1
password__a12345678_timeout_100
password_******_timeout_100 加密第二个命令字符串
2
aaa_password_“a12_45678”timeout__100_“”_
aaa_password_******_ timeout__“” 加密第三个命令字符串

四、解题思路

  1. 第一行输入命令字索引K;
  2. 第二行输入命令字符串S;
  3. 将命令字符串S转为数组;
  4. 遍历数组;
    • 可以通过两个双引号”来标识包含下划线 的命令字或空命令字(仅包含两个双引号的命令字);
    • 命令字之间以一个或多个下划线 _ 进行分割;
    • 如果是最后一位 则直接结束最后一个命令字;
    • 其它即为字符串
  5. 输出处理后的命令字符串,如果无法找到指定索引的命令字,输出字符串ERROR。

五、Java算法源码

package com.guor.od;

import java.util.*;

public class OdTest01 {
    /**
     * 敏感字段加密
     */
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        // 命令字索引K
        int K = Integer.parseInt(scanner.nextLine());
        // 命令字符串S
        String S = scanner.nextLine();
        char[] arr = S.toCharArray();
        String str = "";
        List<String> list = new ArrayList<>();
        for (int i = 0; i < arr.length; i++) {
            char item = arr[i];
            // 可以通过两个双引号”来标识包含下划线 的命令字或空命令字(仅包含两个双引号的命令字)
            if (item == '"' && str.contains(item + "")) {
                str += "\"";
                list.add(str);
                str = "";
                // 命令字之间以一个或多个下划线 _ 进行分割
            } else if (item == '_' && !str.contains("\"")) {
                if (!str.equals("")) {
                    list.add(str);
                    str = "";
                }
                // 如果是最后一位 则直接结束最后一个命令字
            } else if (i == arr.length - 1) {
                str += item;
                list.add(str);
                str = "";
            } else {
                str += item;
            }
        }

        if (K > list.size() - 1 || K < 0) {
            System.out.println("ERROR");
        } else {
            list.set(K, "******");
            String ret = "";
            for (String item : list) {
                ret += "_" + item;
            }
            ret = ret.replaceFirst("_", "");
            System.out.println(ret);
        }
    }
}

六、效果展示

1、输入

2
nezha_study_“java”_you_come

2、输出

nezha_study_******_you_come

华为OD机试 - 敏感字段加密(Java 2023 B卷 100分)_第1张图片


下一篇:华为OD机试 - 荒岛求生 - 栈Stack(Java 2023 B卷 100分)

本文收录于,华为OD机试(JAVA)真题(A卷+B卷)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

你可能感兴趣的:(搬砖工逆袭Java架构师,华为od,算法,送书,学习方法)