PTA7-6找出重复签到的同学

题目如下:

找出签到数据中重复签到的同学

输入格式:

[1, 2, 2, 3, 4, 5, 4],数字表示收集的签到的学生的学号

输出格式:

2 4
输出重复签到的学生学号,从小到大输出,数字后面有一个空格符

———————————————————————————————————————————

我的解题思路如下:

这一道题输入的内容既有数字,又有符号,如“ [ “、“ ] ”、“ , “ ,因此,首先我们应该将输入的字符串中的符号去掉,只留下数字部分,在上周的java实验课上,我们刚好就学到了正则表达式和String类,其中正则表达式中,符号的的写法为:\\p{Punct},在通过String类里面的split方法,我们可以将输入的字符串中的符号部分全部去掉,在通过Integer类的parseInt方法,又可以将序号转换为整型,在通过建立一个整型数组,将转换后的String的长度length作为数组长度,写一个循环,循环中不断读入String的数字,并将下标与String内读到的数字相同的位置+1,这样在String遍历一遍后,整型数组中大小大于1的位置,其下标即为重复签到的学生的学号。

具体的实现代码如下:


import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        String s=input.nextLine();
        String 序号[]=s.split("\\p{Punct}| ");
        int Num[]=new int[序号.length];int i=0,j=1;
        while((2*j-1)<=序号.length){
            i=Integer.parseInt(序号[2*j-1]);
            j++;
            Num[i]++;
            if(Num[i]>1)
                System.out.print(i+" ");
        }

    }
}

其中while之所以使用2*j-1而不是直接用j的原因是,在使用了split方法去除了标点符号之后,原来标点符号的位置变成了null,如果直接将其传给parseInt方法将会发生异常,故使用了2*j-1的方法读取奇数位的字符,即数字部分。

PTA评分结果:

总结:

正则表达式可以很方便的处理字符串中特定的元素,split方法不会缩减字符串长度,在使用之后要注意内容为NULL的部分

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值