《抄送列表》:过滤次要文件,优先处理重要文件

目录

一、题目

二、思路 

1、查找字符/字符串方法:str1.indexOf( )

2、字符串截取方法:str1.substring( ) 

 三、代码

详细注释版:

简化注释版:


 

一、题目

题目:抄送列表          题目链接:抄送列表

        NowCoder每天要处理许多邮件,但他并不是在收件人列表中,有时候只是被抄送。他认为这些抄送的邮件重要性比自己在收件人列表里的邮件低,因此他要过滤掉这些次要的邮件,优先处理重要的邮件。
        现在给你一串抄送列表,请你判断目标用户是否在抄送列表中。

输入描述:
输入有多组数据,每组数据有两行。

第一行抄送列表,姓名之间用一个逗号隔开。如果姓名中包含空格或逗号,则姓名包含在双引号里。总长度不超过512个字符。

第二行只包含一个姓名,是待查找的用户的名字(姓名要完全匹配)。长度不超过16个字符。

输出描述:
如果第二行的名字出现在收件人列表中,则输出“Ignore”,表示这封邮件不重要;否则,输出“Important!”,表示这封邮件需要被优先处理。

示例1:
输入
Joe,Kewell,Leon
Joe
"Letendre, Bruce",Joe,"Quan, William"
William
输出
Ignore
Important!

二、思路 

        要点是字符串的处理。对于第一行字符串的输出,我们直接对其进行处理,即将名字直接进行存储(set),在这里就直接对“”中的名字进行处理。当输入第二行的时候,直接在set中进行查找即可。(详细注释在代码中)

1、查找字符/字符串方法:str1.indexOf( )

  • public int indexOf(int ch): 返回指定字符在字符串中第一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1。
  • public int indexOf(int ch, int fromIndex): 返回从 fromIndex 位置开始查找指定字符在字符串中第一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1。
  • int indexOf(String str): 返回指定字符在字符串中第一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1。
  • int indexOf(String str, int fromIndex): 返回从 fromIndex 位置开始查找指定字符在字符串中第一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1。

2、字符串截取方法:str1.substring( ) 

public String substring(int beginIndex)

public String substring(int beginIndex, int endIndex)

  • beginIndex -- 起始索引(包括), 索引从 0 开始。

  • endIndex -- 结束索引(不包括)。

 三、代码

详细注释版:

import java.util.*;
/**
 * Created with IntelliJ IDEA.
 * Description:抄送列表
 * User: WangWZ
 * Date: 2023-04-15
 * Time: 15:34
 */
public class Main2 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()) {
            //接收第一行数据
            String str1 = sc.nextLine();
            //处理字符串
            Set<String> set = new HashSet<>();
            //从头开始遍历整个字符串
            //使用 indexOf( , )传入两个参数的形式,第一个参数指定要找的字符/字符串,第二个int类型参数指定要开始找的位置
            int i = 0;
            int end = 0;
            while(i < str1.length()) {
                if(str1.charAt(i) == '\"') {
                    //遇到了第一个 “
                    //说明后面的名字是在“”里的
                    //所以要在set中存储的是“”里面的一整个字符串
                    //因此要找到第二个 ”,然后将其位置下标记录下来,最后用字符串截取方法来将其保存到set中。
                    end = str1.indexOf('\"',i + 1);
                    //substring返回的字符串的范围是[i+1,end)
                    //即截取到end之前的字符
                    //所以end下标处的 ” 不会被截取出来。
                    //因此可以直接放入set中
                    String ans = str1.substring(i+1,end);
                    set.add(ans);
                    //最后更新i值
                    //end此时是 ” 的下标,要查后面新的名字了,所以+1
                    i = end + 1;
                } else {
                    //没有“”的名字的情况
                    //找到','即名字的间隔
                    //然后把','之前的字符放入set中
                    end = str1.indexOf(',',i);
                    //考虑特殊情况
                    //当最后一个名字时,名字结束没有逗号,所以end值变成-1
                    if(end == -1) {
                        set.add(str1.substring(i,str1.length()));
                        break;
                    }
                    //不是最后一个名字
                    set.add(str1.substring(i,end));
                    i = end + 1;
                }

            }

            //处理第二行数据
            String str2 = sc.nextLine();
            if(set.contains(str2)) {
                System.out.println("Ignore");
            } else {
                System.out.println("Important!");
            }
        }
    }
}

简化注释版:

import java.util.*;

/**
 * Created with IntelliJ IDEA.
 * Description:抄送列表
 * User: WangWZ
 * Date: 2023-04-15
 * Time: 15:34
 */
public class Main2 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()) {
            //接收第一行数据
            String str1 = sc.nextLine();
            Set<String> set = new HashSet<>();
            int i = 0;
            int end = 0;
            while(i < str1.length()) {
                if(str1.charAt(i) == '\"') {
                    end = str1.indexOf('\"',i + 1);
                    String ans = str1.substring(i+1,end);
                    set.add(ans);
                   i = end + 1;
                } else {
                    //没有“”的名字的情况
                    end = str1.indexOf(',',i);
                    //考虑特殊情况
                    //当最后一个名字时,名字结束没有逗号,所以end值变成-1
                    if(end == -1) {
                        set.add(str1.substring(i,str1.length()));
                        break;
                    }
                    //不是最后一个名字
                    set.add(str1.substring(i,end));
                    i = end + 1;
                }

            }

            //处理第二行数据
            String str2 = sc.nextLine();
            if(set.contains(str2)) {
                System.out.println("Ignore");
            } else {
                System.out.println("Important!");
            }
        }
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值