每日一道算法题 1

借鉴文章:Java-敏感字段加密 - 哔哩哔哩

题目描述

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

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

2、命令字之间以一个或多个下划线_进行分割

3、可以通过两个双引号""来标识包含下划线_的命令字或空命令字(仅包含两个双引号的命令字),双引号不会在命令字内部出现

请对指定索引的敏感字段进行加密,替换为******(6个*),

并删除命令字前后多余的下划线_。

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

输入描述

输入为两行,

第一行为命令字索引K (从0开始),

第二行为命 令字符串S。

输出描述

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

用例

|----|-----------------------------------|
| 输入 | 1 passworda12345678_timeout_100 |
| 输出 | password_******_timeout_100 |

|----|--------------------------------------------|
| 输入 | 2 aaa_password_"a12_45678"timeout_100""_ |
| 输出 | aaa_password_******timeout_100"" |
| 说明 | 无 |

java 程序

package com.tarena.test.B10;

import java.util.LinkedList;

import java.util.Scanner;

/**

*

*

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

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

2、命令字之间以一个或多个下划线_进行分割

3、可以通过两个双引号""来标识包含下划线_的命令字或空命令字(仅包含两个双引号的命令字),双引号不会在命令字内部出现

请对指定索引的敏感字段进行加密,替换为******(6个*),

并删除命令字前后多余的下划线_。

如果无法找到指定索引的命令字,输出字符串ERROR 作者:红叶快乐起来 https://www.bilibili.com/read/cv23309523/ 出处:bilibili

* @author Administrator

*

*/

public class B11Self {

public static void main(String[] args) {

try(Scanner sc = new Scanner(System.in)){

Integer index = Integer.parseInt( sc.nextLine());

String value = sc.nextLine();

System.out.println(resultStr(index,value));

}

}

public static String resultStr(Integer index,String value) {

LinkedList<String> list = new LinkedList<>();

char[] valueArr = value.toCharArray();

for(int i =0;i<valueArr.length;i++) {

char ca = valueArr[i];

String temp = "";

if(ca == '"') {

int next = value.indexOf('"',i+1);

//+1因为后面的"也需要截取到

temp = value.substring(i,next+1);

i = next + 1;

}else {

int next = value.indexOf("_",i);

if(next != -1) {

temp = value.substring(i,next);

i = next;

}else {

//没有_直接截取后面全部的

temp = value.substring(i);

//结束循环

i = value.length();

}

}

if(!"".equals(temp)) {

list.add(temp);

}

}

if(index<list.size()) {

list.set(index, "******");

StringBuilder str = new StringBuilder();

list.forEach(temp -> str.append(temp).append("_"));

//将最后的_删除

return str.substring(0,str.length()-1);

}else {

return "ERROR";

}

}

}

了解知识点:

1 、try(){} try 方法的()内可以自主关闭任何java流类型参数

2、subString(begin,end) begin与end相同是返回"" (空字符串)

3、subString(0,value.length()); 这样的截取没有作用。subString 是包头不包尾,但是java的索引是从0开始。但是长度是1。如果要丢弃最后一个字符subString(0,value.length()-1) 才可以;

相关推荐
烟雨书信5 分钟前
LINUX中Docker Swarm的介绍和使用
java·linux·docker
今天秃头了吗??20 分钟前
【JAVA】网络编程
java·网络·网络编程·socket
煎饼皮皮侠23 分钟前
【图解】idea中快速查找maven冲突
java·maven·intellij-idea·冲突
rockmelodies24 分钟前
【PHP7内核剖析】-1.1 PHP概述
开发语言·php
科兴第一吴彦祖24 分钟前
在线会议系统是一个基于Vue3 + Spring Boot的现代化在线会议管理平台,集成了视频会议、实时聊天、AI智能助手等多项先进技术。
java·vue.js·人工智能·spring boot·推荐算法
工一木子25 分钟前
HashMap源码深度解析:从“图书馆“到“智能仓库“的进化史
java·源码·hashmap
又菜又爱玩呜呜呜~35 分钟前
go使用反射获取http.Request参数到结构体
开发语言·http·golang
Lululaurel36 分钟前
机器学习系统框架:核心分类、算法与应用全景解析
人工智能·算法·机器学习·ai·分类
愚润求学40 分钟前
【贪心算法】day8
c++·算法·leetcode·贪心算法