每日一道算法题 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) 才可以;

相关推荐
TDengine (老段)2 小时前
TDengine 索引使用指南 — 何时建、怎么建、怎么用
java·大数据·数据库·物联网·时序数据库·tdengine·涛思数据
逝水无殇2 小时前
C# 反射详解
开发语言·后端·c#
Lumos1862 小时前
故障保护与鲁棒性(十七)
算法
xlxxy_2 小时前
sap获取批次特性报表
java·linux·开发语言·前端·数据库·abap·mm
手写码匠2 小时前
从零实现大模型推理引擎:Continuous Batching 与动态调度系统深度解析
人工智能·深度学习·算法·aigc
北冥you鱼2 小时前
Go语言常用包使用指南:从标准库到第三方利器
开发语言·microsoft·golang
俺不中嘞2 小时前
python常用函数
开发语言·python
栋***t2 小时前
从“工具”到“基建”,麦塔在线考试系统经历的时代变局与定位逻辑
java·大数据·数据库·开源软件·无纸化
欢喜躲在眉梢里2 小时前
用飞算Java做了一套新能源充电运营管理系统:把站点、设备、订单拆成可运营的微服务
java·开发语言·微服务·ai编程·技术分享·java开发·飞算javaai炫技赛
wabs6662 小时前
关于单调栈【力扣503.下一个更大元素II的思考】
算法·单调栈