这是精确指令,但我已经做了一些。我会在底部写下我需要帮助的内容。
。我想编写一个程序,以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。
答案 0 :(得分:6)
使用这样的正则表达式:
myString.matches("\\d{3}-\\d{2}-\\d{4}");
答案 1 :(得分:1)
ssn.matches("^(\\d{3}-?\\d{2}-?\\d{4})$");
答案 2 :(得分:0)
当然使用正则表达式是可行的方法,但鉴于这是一项任务,听起来他们希望您手动完成,这可能是他们正在寻找的。 p>
Character.isDigit()
Read this documentation
String.charAt()
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 == '-');
}
}