题目根本没有讲清楚什么时候该有下划线 import java.util.*; import java.util.Scanner; public class Main { static Scanner scanner=new Scanner(System.in); public static void main(String[] args) {

    int index=Integer.parseInt(scanner.nextLine());

    String input=scanner.nextLine();
    char[] chArr=input.toCharArray();
    String cmd="";
    List<String> cmdList=new ArrayList<>();
    for(int i=0;i<chArr.length;i++){
        char item=chArr[i];
        if(item=='"'&&cmd.contains(item+"")){
            //如果是双引号 且该命令字内有 那么就是结束的双引号
            cmd+="\"";
            cmdList.add(cmd);
            cmd="";
        }else if(item=='_'&&!cmd.contains("\"")){
            //item=='_' 下划线 表示指令结束
            //!cmd.contains("\"") 该命令内前面不包含" 若包含 则是引号内的 为同一个命令字
            //cmd.equals("") 该命令字内是空的 那么就是空下划线 无意义 过滤掉
            if(!cmd.equals("")){
                cmdList.add(cmd);
                cmd="";
            }
        }
        else if(i==chArr.length-1){
            //如果是最后一位 则直接结束最后一个命令字
            cmd+=item;
            cmdList.add(cmd);
            cmd="";
        }
        else{
            //其他 情况 则是命令字
            cmd+=item;
        }
    }
    //password__a12345678_timeout_100
    //aaa_password_"a12_45678"_timeout__100_""_
    if(index>cmdList.size()-1||index<0){
        System.out.println("ERROR");
    }else{
        cmdList.set(index, "******");
        String result="";
        for(String item:cmdList){
            result+="_"+item;
        }
        result=result.replaceFirst("_", "");
        System.out.println(result);
    }
}

}

这是正确代码,跑一个示例如下: 3 abc__asd""_jklu"asda_asda""a"""__asdf"a"sd abc_asd""jklu******"a"""_asdf"a"_sd

第一个空的双引号前没有下划线,第二个空双引号前后都有下划线,所以双引号前后到底要不要有下划线?示例给的又少,讲的有不清楚,真的浪费时间

0 条评论

目前还没有评论...

信息

ID
108
时间
1000ms
内存
256MiB
难度
8
标签
(无)
递交数
266
已通过
48
上传者