《收件人列表》:生成相应的收件人列表

该文讨论了一个Java编程题目,涉及如何处理包含逗号和空格的收件人姓名列表。关键在于正确使用nextInt()和nextLine(),避免遗留的回车符影响后续输入。解决方案是使用List存储姓名,对包含特殊字符的姓名添加引号,并在读取整数后使用nextLine()清除回车符。
摘要由CSDN通过智能技术生成

目录

一、题目

 二、思路

nextLine( ) 前面不能出现 nextInt( ) 或 next( ):

三、代码


 

一、题目

题目:收件人列表       题目链接:收件人列表

        NowCoder每天要给许多客户写电子邮件。正如你所知,如果一封邮件中包含多个收件人,收件人姓名之间会用一个逗号和空格隔开;如果收件人姓名也包含空格或逗号,则姓名需要用双引号包含。
        现在给你一组收件人姓名,请你帮他生成相应的收件人列表。

输入描述:
        输入包含多组数据。

        每组数据的第一行是一个整数n (1≤n≤128),表示后面有n个姓名。

        紧接着n行,每一行包含一个收件人的姓名。姓名长度不超过16个字符。

输出描述:
        对应每一组输入,输出一行收件人列表。
输入
3
Joe
Quan, William
Letendre,Bruce
2
Leon
Kewell
输出
Joe, "Quan, William", "Letendre,Bruce"
Leon, Kewell

 二、思路

        观察题目要求及用例,发现本题实质上是对输入的字符串进行处理输出的问题。可以使用 List 存放每行的收件人,最后利用字符串拼接 join 方法进行输出。

        在将每行的数据放入的过程中,进行判断:当数据中包含“  , ”或者“   ”,就将前后加上“”再放入List中。判断数据是否包含“  , ”或者“   ”的方法使用 contains() 方法。

注意:

        在这个题目的输入中,既有 int 类型又有 String 类型,我们就要 nextInt() 和 nextLine() 的问题。

String next​( ): 键盘录入任意符号(读取到空格外的有效字符后,回车结束,但只录取空格之前的有效字符
String nextLine( ): 键盘录入一行,回车结束(录入什么就是什么)
int nextInt( ) :键盘录入一个整数,回车结束(只要整数,否则报异常)

nextLine( ) 前面不能出现 nextInt( ) 或 next( ):

        因为 nextInt( ) 以回车作为结尾标志且它会把回车符留在内存中,当使用 nextInt( ) 录入一个整数按下回车后,整数被 nextInt( ) 读取,回车符会留在内存,如果 nextInt( ) 后面有 nextLine( ) 时,这个回车符便会直接被 nextLine( ) 读取。

解决方法:

        在使用 next( )读取完一个整数后,因为有回车符在内存中,所以我们先使用 nextLine( ) 将这个回车符从内存中读取出来,然后再正常使用 nextLine() 读取要读取的数据。

三、代码

        代码比较简单,重点是 next( ) 后面 nextLine( ) 的处理。

import java.util.*;

/**
 * Created with IntelliJ IDEA.
 * Description:收件人列表
 * User: WangWZ
 * Date: 2023-04-14
 * Time: 11:22
 */
public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            int n = sc.nextInt();
            sc.nextLine(); //将回车接收掉(从内存中拿走)
            List<String> list = new ArrayList<>();
            for(int i = 0; i < n; i++) {
                String str = sc.nextLine();
                String str2 = str;
                if(str.contains(",")||str.contains(" ")) {
                    str2 = "\"" + str + "\"";
                }
                list.add(str2);
            }
            System.out.println(String.join(", ",list));
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值