华为OD机试E卷 - 敏感字段加密(Java)

题目描述

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

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);
    	   
       }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值