敏感字段加密

题目描述:【敏感字段加密】给定一个由多个命令字组成的命令字符串:

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""

解题思路

遍历字符串,未出现下划线,直接进行拼接
出现下划线,判断是否在引号内,如果在引号内,继续拼接字符串;如果不在引号内,则截取字符串放在集合中
根据索引,对集合中字符串进行拼接

`public class 敏感字加密 {

public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);

    int n = sc.nextInt();
    sc.nextLine();
    String s = sc.nextLine();
    int len = s.length();
    List<String> list = new ArrayList<>();

    String temp = "";
    Boolean yh = false; //是否有引号
    for (int i = 0; i < len; i++) {
        //第i行是否包含下划线
        if (s.charAt(i) != '_') {
            if (s.charAt(i) == '\"') {//是否有引号
                yh = !yh;
            }
            temp += s.charAt(i);  //非下划线直接拼接字符
            if (i == len - 1) {
                list.add(temp); //最后一位直接push
            }
        } else {
            if (temp == "") {
                continue;   //字符串为空则进入下个循环
            }
            if (yh) {
                temp += s.charAt(i);  //引号内的下划线直接拼接字符串
            } else {
                list.add(temp); //push字符串
                temp = "";  //置空为下次使用
            }
        }
    }
    int count = list.size();
    if (n >= count) {
        System.out.println("ERROR");
    } else {
        String res = "";
        for (int i = 0; i < count; i++) {
            if (i == n) {
                res += "******";  //对应下标的字符串进行加密
            } else {
                res += list.get(i);   //拼接字符串
            }
            if (i != list.size() - 1) {
                res += "_";   //非最后一个后面需要加下划线
            }
        }
        System.out.println(res);
    }
}

}`

posted @ 2023-11-01 15:37  约拿小叶  阅读(36)  评论(0编辑  收藏  举报