目录
一、题目
二、思路
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!");
}
}
}
}