验证输入字符串是否是正确的社会安全号码

时间:2015-04-21 06:40:53

标签: java

这是精确指令,但我已经做了一些。我会在底部写下我需要帮助的内容。

。我想编写一个程序,以DDD-DD-DDDD格式读取社会安全号码作为字符串(包括破折号),其中D是数字。

。我需要编写一个方法:public static boolean validSSN(String s)来检查字符串是否采用DDD-DD-DDDD格式。在我做任何事情之前,我必须检查输入字符串的长度。

。长度应为11个字符(包括 - ' s),其他任何内容都无效。

。我需要编写2个布尔方法:isDigit(char c)和isDash(char c)来帮助检查输入的格式并在validSSN的方法体中调用它们。

。在main方法中,我需要使用scanner对象的nextLine()方法读取整行作为字符串调用validSSN方法打印输入以及它是否有效。

这是我到目前为止所做的:

import java.util.Scanner;

public class lab14 {

    public static void main(String[] args){
        Scanner SSN = new Scanner(System.in);

        System.out.println("Enter a Social Security Number");
        int num = SSN.nextInt();

    }
    public static boolean validSSN(String s){
        if 

    }
    public static boolean isDigit(char c){

    }
    public static boolean isDash(char c){

    }

}

所以,我已经写出了main方法的标题,以及用于检查是否有11个字符的布尔方法的标题,一个布尔方法的标题,用于检查数字是否在右侧place和boolean方法的标头,用于检查破折号是否在正确的位置。我已经导入了一个Scanner方法,并为用户发送了一个社会安全号码。

我需要帮助的是每种方法的主体内容。如果有11位数字,如果数字在正确的位置,并且破折号位于正确的位置,我需要帮助才能返回true。所以,如果我输入123-56-7890,它会说" 123-56-7890是一个有效的SSN",我输入123/56/7890或123-567-890它会说"" 123-567-890"或" 123-567-890"不是SSN"。有人可以帮我验证输入是否为SSN。

3 个答案:

答案 0 :(得分:6)

使用这样的正则表达式:

myString.matches("\\d{3}-\\d{2}-\\d{4}");

答案 1 :(得分:1)

ssn.matches("^(\\d{3}-?\\d{2}-?\\d{4})$");

答案 2 :(得分:0)

当然使用正则表达式是可行的方法,但鉴于这是一项任务,听起来他们希望您手动完成,这可能是他们正在寻找的。 Character.isDigit()

上的

Read this documentation String.charAt()

上的

Read this documentation

Read about the conditional operator here

import java.util.Scanner;

public class lab14 {

    public static void main(String[] args){
        Scanner SSN = new Scanner(System.in);
        String s = null;
        boolean valid = false;

        System.out.println("Enter a Social Security Number");

        while (valid == false){
          try{
            s = SSN.nextLine();
            valid = true;
          } catch(Exception e){
            System.out.println("No input! Enter a Social Security Number");
          }
        }

        String result = (validSSN(s) ? " is a valid SSN" : " is not a SSN");
        System.out.println(s + result);

    }

    public static boolean validSSN(String str){
      //check length first
      if (str.length() != 11) return false;

      //traverse through each character
      for (int i = 0; i < str.length(); i++){
        if (i <= 2){
          //these must be digits, otherwise return false
          if (!isDigit(str.charAt(i))){
            return false;
          }
        }
        else if (i == 3 || i == 6){
          //these must be dashes, otherwise return false
          if (!isDash(str.charAt(i))){
            return false; 
          }
        }
        else if (i > 6){
          //these must be digits, otherwise return false
          if (!isDigit(str.charAt(i))){
            return false;
          }
        }
      }

      //return true if it didn't error out
      return true;
    }

    public static boolean isDigit(char c){
      return Character.isDigit(c);
    }

    public static boolean isDash(char c){
      return (c == '-');
    }

}