华为OD机试 2023B卷题库疯狂收录中,刷题点这里
本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。
给定一个由多个命令字组成的命令字符串:
请对指定索引的敏感字段进行加密,替换为****** (6个*) ,并删除命令字前后多余的下划线如果无法找到指定索引的命令字,输出字符串ERROR。
输入为两行,第一行为命令字索引K (从0开始) ,第二行为命令字符串S。
输出处理后的命令字符串,如果无法找到指定索引的命令字,输出字符串ERROR
输入 | 输出 | 说明 |
---|---|---|
1 password__a12345678_timeout_100 |
password_******_timeout_100 | 加密第二个命令字符串 |
2 aaa_password_“a12_45678”timeout__100_“”_ |
aaa_password_******_ timeout__“” | 加密第三个命令字符串 |
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);
}
}
}
2
nezha_study_“java”_you_come
nezha_study_******_you_come
下一篇:华为OD机试 - 荒岛求生 - 栈Stack(Java 2023 B卷 100分)
本文收录于,华为OD机试(JAVA)真题(A卷+B卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。