每日一道算法题 1

2023-12-13 03:26:59

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

题目描述?

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

1、字符串长度小于等于127字节,只包含大小写字母,数字,下划线和偶数个双引号
2、命令字之间以一个或多个下划线_进行分割
3、可以通过两个双引号""来标识包含下划线_的命令字或空命令字(仅包含两个双引号的命令字),双引号不会在命令字内部出现

请对指定索引的敏感字段进行加密,替换为******(6个*),
并删除命令字前后多余的下划线_。
如果无法找到指定索引的命令字,输出字符串ERROR

输入描述

输入为两行,

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

第二行为命?令字符串S。

输出描述

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

用例

输入

1

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

文章来源:https://blog.csdn.net/zhen340417593/article/details/134899437
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。