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

news2025/1/20 5:51:48

目录

一、题目

二、思路 

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!");
            }
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/434699.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java[集合] Map 和 Set

哈喽&#xff0c;大家好~ 我是保护小周ღ&#xff0c;本期为大家带来的是 Java Map 和 Set 集合详细介绍了两个集合的概念及其常用方法&#xff0c;感兴趣的朋友可以来学习一下。更多精彩敬请期待&#xff1a;保护小周ღ *★,*:.☆(&#xffe3;▽&#xffe3;)/$:*.★* ‘ 一、…

JVM知识汇总

1、JVM架构图 2、Java编译器 Java编译器做的事情很简单&#xff0c;其实就是就是将Java的源文件转换为字节码文件。 1. 源文件存储的是高级语言的命令&#xff0c;JVM只认识"机器码"&#xff1b; 2. 因此将源文件转换为字节码文件&#xff0c;即是JVM看得懂的"…

Node.js—Buffer(缓冲器)

文章目录 1、概念2.、特点3、创建Buffer3.1 Buffer.alloc3.2 Buffer.allocUnsafe3.3 Buffer.from 4、操作Buffer4.1 Buffer 与字符串的转化4.2 Buffer 的读写 参考 1、概念 Buffer 是一个类似于数组的对象 &#xff0c;用于表示固定长度的字节序列。Buffer 本质是一段内存空间…

视觉学习(四) --- 基于yolov5进行数据集制作和模型训练

环境信息 Jetson Xavier NX&#xff1a;Jetpack 4.4.1 Ubuntu&#xff1a;18.04 CUDA: 10.2.89 OpenCV: 4.5.1 cuDNN&#xff1a;8.0.0.180一.yolov5 项目代码整体架构介绍 1. yolov5官网下载地址&#xff1a; GitHub: https://github.com/ultralytics/yolov5/tree/v5.0 2. …

单元测试中的独立运行

单元测试中的独立运行 单元测试是针对代码单元的独立测试。要测试代码单元&#xff0c;首先要其使能够独立运行。项目中的代码具有依赖关系&#xff0c;例如&#xff0c;一个源文件可能直接或间接包含大量头文件&#xff0c;并调用众多其他源文件的代码&#xff0c;抽取其中的一…

论文阅读:Unsupervised Manifold Linearizing and Clustering

Author: Tianjiao Ding, Shengbang Tong, Kwan Ho Ryan Chan, Xili Dai, Yi Ma, Benjamin D. Haeffele Abstract 在本文中&#xff0c;我们建议同时执行聚类并通过最大编码率降低来学习子空间联合表示。 对合成和现实数据集的实验表明&#xff0c;所提出的方法实现了与最先进的…

limit、排序、分组单表查询(三)MySQL数据库(头歌实践教学平台)

文章目的初衷是希望学习笔记分享给更多的伙伴&#xff0c;并无盈利目的&#xff0c;尊重版权&#xff0c;如有侵犯&#xff0c;请官方工作人员联系博主谢谢。 目录 第1关&#xff1a;对查询结果进行排序 任务描述 相关知识 对查询结果排序 指定排序方向 编程要求 第2关&a…

浏览器架构和事件循环

浏览器架构 早期浏览器【单进程多线程】 Page Thread 页面渲染&#xff0c;负责执行js,plugin,drawNetWork Thread 网络请求其余线程 file, storage缺点&#xff1a;只要其中一个线程崩溃&#xff0c;页面就会崩溃。 现代浏览器架构 多进程的浏览器&#xff0c;浏览器的每一个…

几种常见的激活函数

文章目录 常见的激活函数介绍Sigmoid函数ReLU函数LeakyReLU函数Tanh函数Softmax函数总结 常见的激活函数介绍 激活函数是神经网络中的重要组成部分&#xff0c;它决定了神经元的输出。在神经网络的前向传播中&#xff0c;输入数据被传递给神经元&#xff0c;经过加权和和激活函…

Unity自动化打包(1)

一 安装Jenkins https://www.jenkins.io/download/ 官网 1&#xff09; 使用 brew 安装 2&#xff09; 安装完成后一般都会遇到问题 我用的是jenkins-lts 稳定版 解决办法 删除掉对应的文件夹 1 rm -rf /usr/local/Homebrew/Library/Taps/homebrew/homebrew-services 2…

kafka延时队列内部应用简介

kafka延时队列_悠然予夏的博客-CSDN博客 两个follower副本都已经拉取到了leader副本的最新位置&#xff0c;此时又向leader副本发送拉取请求&#xff0c;而leader副本并没有新的消息写入&#xff0c;那么此时leader副本该如何处理呢&#xff1f;可以直接返回空的拉取结…

[ 高并发]Java高并发编程系列第二篇--线程同步

并发,听起来高大上的一个词汇,在身处于互联网潮的社会大趋势下,高并发赋予了更多的传奇色彩.首先,我们可以看到很多招聘中,会提到有高并发项目者优先.高并发,意味着,你的前雇主,有很大的业务层面的需求,而且也能怎么你在整个项目中的一个处理逻辑的能力体现.那么,你真的知道什么…

ThreadLocal 内存泄露的原因及处理方式

1、ThreadLocal 使用原理 ThreadLocal的主要用途是实现线程间变量的隔离&#xff0c;表面上他们使用的是同一个ThreadLocal&#xff0c; 但是实际上使用的值value却是自己独有的一份。用一图直接表示threadlocal 的使用方式。 从图中我们可以当线程使用threadlocal 时&#xf…

CRC校验原理及其使用

目录 何为CRC 为什么需要校验 为什么是CRC CRC的缺点 目录 何为CRC 为什么需要校验 为什么是CRC CRC的缺点 如何进行CRC校验 校验标准式是什么玩意&#xff1f; 常见的CRC校验 CRC校验计算过程 CRC校验代码参考 代码解读 生成CRC8校验表的代码 CRC检验网站 如何…

GEE:使用 VCT(Vegetation Change Tracker)算法森林进行时序变化检测分析

作者: _养乐多_ 本文将介绍一段 Google Earth Engine 的代码,该代码用于进行时序变化检测分析,即使用 VCT(Vegetation Change Tracker)算法对某一地区的多年影像进行分析,得出每一年的变化程度,并输出一个 VCT 矩阵,同时还可根据矩阵得到每一年的变化遥感图。可以分析…

时下热门话题:ChatGPT能否取代人类?

时下热门话题&#xff1a;ChatGPT能否取代人类&#xff1f; 2022年11月底&#xff0c;人工智能对话聊天机器人ChatGPT推出&#xff0c;迅速在社交媒体上走红&#xff0c;短短5天&#xff0c;注册用户数就超过100万。2023年1月末&#xff0c;ChatGPT的月活用户已突破1亿&#x…

迭代器设计模式(Iterator Design Pattern)[论点:概念、组成角色、相关图示、示例代码、框架中的运用、适用场景]

概念 迭代器设计模式&#xff08;Iterator Design Pattern&#xff09;是一种行为型设计模式&#xff0c;它提供了一种方法来顺序访问一个聚合对象&#xff08;如集合&#xff09;的元素&#xff0c;而不需要暴露该对象的底层表示。迭代器模式可以帮助我们在不关心底层数据结构…

红酒分类案例中使用分箱处理

红酒分类案例中使用分箱处理 描述 在建立分类模型时&#xff0c;通常需要对连续特征进行离散化(Discretization)处理 &#xff0c;特征离散化后&#xff0c;模型更加稳定&#xff0c;降低了过拟合风险。离散化也叫分箱(binning)&#xff0c;是指把连续的特征值划分为离散的特…

Binder Driver 初探从驱动层角度来看

1&#xff1a;驱动概述 1.1基本简介 Binder 驱动是 Android 专用的&#xff0c;但底层的驱动架构与Linux 驱动一样。binder 驱动在以 misc 设备进行注册&#xff0c;作为虚拟字符设备&#xff0c;没有直接操作硬件&#xff0c;只是对设备内存的处理。主要是驱动设备的初始化(b…

如何刻录光盘文件

常识补充刻录机简介光盘刻录机是一种数据写入设备&#xff0c;利用激光将数据写到空光盘上从而实现数据的储存。其写入过程可以看做普通光驱读取光盘的逆过程。基本原理刻入数据时&#xff0c;利用高功率的激光束反射到盘片&#xff0c;使盘片上发生变化&#xff0c;模拟出二进…