【100%通过率】2025华为od机试A卷 【敏感字段加密】Java 实现

          所有题目均有五种语言实现。C实现目录C++ 实现目录Python实现目录Java实现目录JavaScript实现目录

题目

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

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

输入描述

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

输出描述

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

示例1  输入输出示例仅供调试,后台判题数据一般不包含示例

输入

1
password__a12345678_timeout_100

输出

password_******_timeout_100

示例2  输入输出示例仅供调试,后台判题数据一般不包含示例

输入

2
aaa_password_"a12_45678"_timeout__100_""_

输出

aaa_password_******_timeout_100_""

思路

1:本质上还是一个字符串处理的题目。用下划线分割后,然后将第 k 个 改为 ****** 然后再拼回去。 但是,也有一些 value中包含下划线,但是可能又会被 “”包围起来。

2:代码思路

  • 解析命令字符串

    • 由于命令字可能被下划线 _ 分隔,且双引号 "" 可以用于包含特殊命令字(如带 _ 的命令字或空命令字),我们需要正确解析字符串。
  • 提取命令字

    • 使用遍历的方法,按字符逐步解析,注意双引号的特殊处理
      • 如果遇到 双引号 " ",说明接下来是一个完整的命令字,直到下一个双引号结束。
      • 如果是普通字符,读取直到下一个 _ 结束。
  • 修改指定索引的命令字

    • 如果索引 K 合法,用 "******" 替换相应命令字;
    • 如果索引超出范围,返回 "ERROR"
  • 输出处理后的字符串

    • 需要确保不会因为 _ 过多导致错误。
    • 保证命令字之间仍然用 _ 分隔,不多不少。

考点

1:字符串处理

Code

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int k = Integer.parseInt(sc.nextLine());
        String s = sc.nextLine();
        System.out.println(parseCommands(k, s));
    }

    public static String parseCommands(int k, String s) {
        List<String> commands = new ArrayList<>();
        int n = s.length();
        int i = 0;

        while (i < n) {
            // 处理被双引号包裹的命令
            if (s.charAt(i) == '"') {
                int j = i + 1;
                while (j < n && s.charAt(j) != '"') {
                    j++;
                }
                if (j < n) {
                    commands.add(s.substring(i, j + 1)); // 包括引号
                    i = j + 1;
                } else {
                    break; // 格式异常
                }
            } else if (s.charAt(i) == '_') {
                i++; // 跳过连续下划线
            } else {
                int j = i;
                while (j < n && s.charAt(j) != '_') {
                    j++;
                }
                commands.add(s.substring(i, j));
                i = j;
            }
        }

        // 去掉空串,保留合法空命令字 ""
        List<String> cleaned = new ArrayList<>();
        for (String cmd : commands) {
            if (!cmd.isEmpty() || cmd.equals("\"\"")) {
                cleaned.add(cmd);
            }
        }

        if (k >= cleaned.size()) {
            return "ERROR";
        }

        cleaned.set(k, "******");
        return String.join("_", cleaned);
    }
}

要求

时间限制:C/C++ 1秒,其他语言 2秒

空间限制:C/C++262144K,其他语言524288K

64bit IO Format:%lld

语言限定:
C(clang11), C++(clang++11), Pascal(fpc 3.0.2), Java(javac 1.8), Python2(2.7.3), 
PHP(7.4.7), C#(mcs5.4), ObjC(gcc 5.4), Pythen3(3.9), JavaScript Node(12.18.2), JavaScript V8(6.0.0),
Sqlite(3.7.9), R(4.0.3), Go(1.14.4), Ruby(2.7.1), Swift(5.3), matlab(Octave 5.2), Pypy2(pypy2.7.13),
Pypy3(pypy3.6.1), Rust(1.44), Scala(2.11.12), Kotlin(1.4.10), Groovy(3.0.6), TypeScript(4.1.2), Mysql(8.0)

 更多题目链接:

华为OD 2025 最新最全机试题库及讲解,A+B+C+D+E卷题库大全。

Java题库: 2024华为OD机试(JAVA)真题【E卷+A卷+B卷+C卷+D卷】目录_华为od机试真题-CSDN博客

Python题库: 2024华为OD机试(Python)真题【E卷+A卷+B卷+C卷+D卷】目录_华为od机试好过吗-CSDN博客

C++题库: 2024华为OD机试(C++)真题【E卷+A卷+B卷+C卷+D卷】目录_华为od怎么知道考的是a卷还是b卷-CSDN博客

Js题库: 2024 华为OD机试(JavaScript)真题【E卷+A卷+B卷+C卷+D卷】目录_华为od 2023 q2b卷-CSDN博客

C语言题库: 2024 华为OD机试(C语言)真题【E卷+A卷+B卷+C卷+D卷】目录-CSDN博客

面试手撕题库: 2024华为OD面试手撕代码真题目录_华为od手撕代码-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MISAYAONE

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值