敏感字段加密

题目描述

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

  1. 字符串长度小于等于127字节,只包含大小写字母,数字,下划线和偶数个双引号;

  2. 命令字之间以一个或多个下划线,进行分割;

  3. 可以通过两个双引号 ""来标识包含下划线。的命令字或空命令字(仅包含两个双引号的命令字),双引号不会在命令字内部出现;请对指定索引的敏感字段进行加密,替换为******(6个*),并删除命令只字前后多余的下划线。

  4. 如果无法找到指定索引的命令字,输出字符串Q ERROR。

输入描述

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

输出描述

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

示例1 输入

1 password__a12345678_timeout_100

输出

password_******_timeout_100

索引 1 命令字 "a12345678" 被替换为 "******",并删除了多余的下划线。

示例2 输入

2 aaa_password_"a12_45678"timeout__100""_

输出

aaa_password_******timeout_100""

索引 1 命令字 "a12_45678"(包含在双引号内)被替换为 "******",并删除了多余的下划线。注意最后的空命令字 """" 被保留。

题解

遇到字符 " 后边的字符数原样输出,直到遇到下一个 " ,其他情况下按照 _ 进行分割

源码 Java

import java.util.ArrayList;
import java.util.List;

public class SensitiveWords {

	static Input input ;
	static {
		input = new Input("1\n" +
				"password__a12345678_timeout_100");
		input = new Input("2\n" +
				"aaa_password_\"a12_45678\"_timeout__100_\"\"_");
	}

	public static void main(String[] args) {
		List<String> list = new ArrayList<>();
		int k = Integer.parseInt(input.nextLine());
		String ps = input.nextLine();
		StringBuilder sb = new StringBuilder("");

		for (int i = 0 ; i < ps.length();) {
			if (ps.charAt(i) == '"') {
				// 处理特殊敏感词
				sb.append(ps.charAt(i)) ;
				i++;
				// 遇到下一个 ” 前所有字符原样追加
				while (ps.charAt(i) != '"') {
					sb.append(ps.charAt(i)) ;
					i++;
				}
				sb.append('"');
				list.add(sb.toString());
				sb = new StringBuilder("");
				i++;
			} else {
				// 出现 _ 表示前边有一个敏感词
				if (ps.charAt(i) == '_') {
					// 如果敏感词长度为 0 不记录
					if (sb.length() > 0) {
						list.add(sb.toString());
					}
					sb = new StringBuilder("");
				} else {
					sb.append(ps.charAt(i));
				}
				i++;
			}
		}
		// 处理最后一个敏感词
		if (sb.length() > 0) {
			list.add(sb.toString());
		}
		String[] array = list.toArray(new if (list.size() > k) {
			list.set(k,"******");
			System.out.println(String.join("_", list));
		} else {
			System.out.println("ERROR");
		}
	}
}
#软件开发薪资爆料#
全部评论

相关推荐

10-10 19:23
已编辑
中国科学技术大学 Java
项目:1.部门主要是干嘛的?负责的工作2.交换机和服务是分离的吗?交换机如何和服务进行数据的通信?3.数据通信格式是怎么样的&nbsp;如何对齐?4.介绍下你们公司的网络拓扑。5.介绍下你这个服务的难点&nbsp;如何解决?6.数据的平滑怎么做。八股:7.为啥服务采用nettey作为grpc连接服务器?优点是什么? &nbsp;&nbsp;&nbsp;那什么样的场景不适合用nettey呢?-大文件阻塞&nbsp;&nbsp;那如何解决?-异步&nbsp;&nbsp;&nbsp;如何&nbsp;多路复用到底在复用什么资源?8.io模式中阻塞非阻塞区别&nbsp;同步和非同步区别?9.线上问题的排查及优化10.cms和g1最本质的不同是什么?-可预测&nbsp;&nbsp;如何做到的可预测?&nbsp;&nbsp;给你两个场景&nbsp;一个flink流式计算任务&nbsp;一个淘宝站点&nbsp;哪个更适合g1呢?stw是如何影响这个场景的。&nbsp;&nbsp;离线任务最主要的特性?11.索引分类?哪些适合索引啊等等12.索引(a&nbsp;int,&nbsp;b&nbsp;char)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;xx&nbsp;from&nbsp;xx&nbsp;where&nbsp;b='1'&nbsp;and&nbsp;a=2命中吗?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;xx&nbsp;from&nbsp;xx&nbsp;where&nbsp;b='1'&nbsp;命中吗?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;xx&nbsp;from&nbsp;xx&nbsp;where&nbsp;a='10001'命中吗?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;xx&nbsp;from&nbsp;xx&nbsp;where&nbsp;b=10001命中吗?手撕:旋转排序数组
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务