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

相关推荐
AI直播技术杂谈2 分钟前
AI直播推流链路中延迟优化的通用技术方案
开发语言·人工智能·php
2601_957174659 分钟前
大模型算法 简单 容易 用这个方法
算法
VALENIAN瓦伦尼安教学设备11 分钟前
激光对中仪采购要点
数据库·嵌入式硬件·算法
vx-程序开发23 分钟前
springboot农产品运输服务平台---附源码75498
java·javascript·spring boot·python·eclipse·django·php
Dxy12393102161 小时前
python 中的 APScheduler 使用详解
开发语言·python
zzh___zzh2 小时前
SQL 窗口函数 ROW_NUMBER、RANK、DENSE_RANK 常用方法笔记
java
计科土狗2 小时前
GESP六级专题之类与对象
java·前端·数据库
Forever Nore2 小时前
LeetCode 1 两数之和
算法·leetcode·职场和发展
福如意如我心意2 小时前
java虚拟线程和Go协程的区别
开发语言
To_OC2 小时前
LC 3 无重复字符的最长子串:从入门滑动窗口到优化写法,再也不怕面试官追问
javascript·算法·leetcode