关于#检查#的问题,如何解决?

img

package zyntm;

import java.util.Scanner;

public class Users {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        int j = 0;
        int[] arr = new int[3];
        for (int i = 0; i < 3; i++) {
            while(true) {
                if (s.split("-")[i].charAt(j)>='0'&&s.split("-")[i].charAt(j)<='9')
                    arr[i]++;
                else
                     break;
                j++;
            }
        }
        if (arr[0]==3&&arr[1]==2&&arr[2]==4)
            System.out.println(s + "是一个合法的社保号");
        else
            System.out.println(s + "是一个不合法的社保号");
    }
}

哪里有问题?如何修改?

你这个输入如果少-分割就会报数组越界异常,如果多出- 比如 DDD-DD-DDDD-DD 这种你也会认为是合法的,如果不采用楼上那种正则的方式,你需要先判断-分割之后数组大小是否为3,然后对数组中的每个字符串进行校验

这个直接正则表达式匹配下就可以了 \d{3}\-\d{2}\-\d{4}