Java 如何使用while循环检查以DDD-DD-ddddd格式输入的社会保险号码是否有效。我试着用if,但被卡住了?

Java 如何使用while循环检查以DDD-DD-ddddd格式输入的社会保险号码是否有效。我试着用if,但被卡住了?,java,while-loop,Java,While Loop,如何使用while循环检查是否以正确的DDD-DD-ddddd格式输入了社会保险号码?。我试过使用if,但卡住了?我想这会解决你的问题。正则表达式 [0-9]{3}-[0-9]{2}-[0-9]{4}应该与该格式中的任何内容匹配,假设它必须是一个数字。当然,这可能会使事情变得过于复杂,如果您只是检查连字符的位置是否正确,以及字符串的长度是否正确,那么您所拥有的一切都会很好 import java.util.Scanner; public class Ex4_21 { public s

如何使用while循环检查是否以正确的
DDD-DD-ddddd
格式输入了社会保险号码?。我试过使用if,但卡住了?

我想这会解决你的问题。正则表达式
[0-9]{3}-[0-9]{2}-[0-9]{4}
应该与该格式中的任何内容匹配,假设它必须是一个数字。当然,这可能会使事情变得过于复杂,如果您只是检查连字符的位置是否正确,以及字符串的长度是否正确,那么您所拥有的一切都会很好

import java.util.Scanner;

public class Ex4_21 {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("this program checks if the social security number entered is valid");
        System.out.println("Please enter a SSN");
        String s = input.nextLine();
        boolean isSSN = true;

        if (s.length() != 11){
            isSSN = false;
        }
        if (!Character.isDigit(s.charAt(0)))
            isSSN = false;
        else if(s.charAt(2) != '_')
            isSSN = false;
        else if(s.charAt(5) != '_')
            isSSN = false;


        //display
        System.out.println(isSSN);

        if (isSSN == true)
            System.out.println(s + " is a valid social security number");
        else
            System.out.println(s  + " is an invalid social security number");
    }

}

你可以这样做

string regex = "[0-9]{3}-[0-9]{2}-[0-9]{4}";
if(s.matches(regex))
{
    System.out.println(s + " is a valid social security number");
}else
    System.out.println(s  + " is an invalid social security number");
inti=0;
布尔isSSN=真;
而(i
//您也可以这样做
对于(int i=0;i
我没有看到while循环。对代码的粗略检查似乎有效且值得编译。while循环要求的要点是什么(我假设这是一个类赋值)?是允许操作员一个接一个地输入SSN?还是希望使用循环进行验证(即循环每个字符并检查有效性)?我应该输入一个像232-23-5436这样的数字,系统告诉我它是有效的,但如果我运行23-43-5436,它应该说SSN无效。OP特别要求使用while循环,而不是常规表达式。我读到这个问题,OP尝试了多种方法,并建议使用while循环,因为他们正在考虑@erroanswerI试图使用if编写代码,但似乎有很多工作要做,这就是为什么我建议使用while循环
 int i=0;
 boolean isSSN =true;
 while(i<11 && !isSSN){
    Character ch = str.charAt(i);
    i++;
    if(Character.isDigit(ch) && (i==0 || i==1 || i==2 || i==4 || i==5 || i==7 || i==8 || i==9  || i==10)) {
         continue;
    } else if (ch == '-' && (i==3 || i==6)) {
         continue;
    }
    isSSN=false;
 }
//You could also do this
for (int i = 0; i < s.length(); i++){
    if (!Character.isDigit(s.charAt(i)))
        System.out.println("Invalid SSN");
}