每日一道算法题 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 = valueArri;

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) 才可以;

相关推荐
z落落20 分钟前
C# 泛型方法(原理、类型推断、多泛型参数)+泛型效率(普通类型 VS Object装箱 VS 泛型)
开发语言·c#
L_090722 分钟前
【C++】异常
开发语言·c++
Frostnova丶22 分钟前
【算法笔记】数学知识
笔记·算法
吴可可1231 小时前
AutoCAD 2016与2014二次开发关键差异
算法
世辰辰辰1 小时前
批量修改图片/文本名子
开发语言·python·批量修改文件名
郑洁文1 小时前
基于Spring Boot的流浪动物救助网站
java·spring boot·后端·毕设·流浪动物救助
雨白2 小时前
哈希:以时间换空间的算法实战
算法
螺丝钉code2 小时前
JAVA项目 Claude code CLAUDE.md 到底应该怎么写
java·人工智能·claude code
z落落3 小时前
C# 四种特殊类:抽象类、密封类、静态类、部分类
开发语言·c#
摇滚侠3 小时前
Maven 入门+高深 单一架构案例 54-59
java·架构·maven·intellij-idea