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

相关推荐
喜欢就别6 分钟前
平均风险:Rényi DP 和零集中 DP
开发语言·r语言
学究天人16 分钟前
数学公理体系大全:第一章 命题逻辑:真值之舞
人工智能·算法·机器学习·数学建模·动态规划·图论·抽象代数
小O的算法实验室17 分钟前
2025年Neurocomputing,基于LLM的进化优化器:结合精英策略推理
算法
万亿少女的梦16819 分钟前
基于Spring Boot、Vue.js和MySQL的超市管理系统设计与实现
java·vue.js·spring boot·mysql·管理系统
无足鸟ICT29 分钟前
【RHCA+】bash命令
linux·开发语言·bash
AI产品实战1 小时前
Gradle打包生成dependencies.xml详解
xml·java·gradle
方华世界1 小时前
企业级Java AI Agent应用平台
java·开发语言·人工智能
2301_800256111 小时前
数据结构基础期末复习例题
数据结构·算法
ujainu小2 小时前
原生性能优化:6变量实现高效桥接
开发语言·华为·性能优化·harmonyos
折哥的程序人生 · 物流技术专研2 小时前
第8篇:模板方法模式的优缺点与面试高频考点
java·设计模式·面试·模板方法模式·行为型模式·优缺点·扩充系列