题目描述
给定一个由多个命令字组成的命令字符串:
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_""
注:未加输出error,根据题目来看,应该是给定的下标超出了命令字范围,然后,打印error即可。此方法,观感比较晦涩,也有取巧的地方,如果,大家有更好的解法,可以一起讨论。
package odTest;
import java.util.Scanner;
public class orderChar {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int index = Integer.parseInt(scanner.nextLine());
String inputStr= scanner.nextLine();
if(inputStr.contains("__")) {
inputStr=inputStr.replace("__", "_");
}
if(inputStr.contains("_\"\"_")) {
inputStr=inputStr.replace("_\"\"_", "_\"\"");
}
System.out.println(inputStr);
char[] chars = inputStr.toCharArray();
int count = 0;
String replaceStr = "";
boolean flag =false;
for(int i=0;i<chars.length;i++) {
if(chars[i]=='_'&& !flag) {
count++;
}
if(count==index&&chars[i]=='"'&&chars[i+1]!='"') {
flag = true;
}
if(count==index && !flag) {
replaceStr = replaceStr+chars[i];
}
if(count==index && flag) {
replaceStr = replaceStr+chars[i];
}
if(chars[i+1]=='"'&&flag) {
replaceStr = replaceStr+"\"";
break;
}
if(count>index) {
break;
}
}
inputStr = inputStr.replace(replaceStr, "_******");
System.out.println(inputStr);
}
}