我只需要一个必须读取ssn(xxx-xx-xxxx)并确定给定ssn是否有效的程序。我只需要一种方法来检查字符串是否只包含#' s和 - ' s。
import java.util.Scanner;
public class Prog7 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Enter a SSN:");
String ssn = input.next();
if((ssn.substring(0, 4).indexOf('-') != 3) || (ssn.substring(4, 7).indexOf('-') != 2) ||
(ssn.substring(ssn.length() - 5, ssn.length()).indexOf('-') != 0) ) {
System.out.println(ssn + " is an invalid social security number");
}
else {
System.out.println(ssn + " is a valid social security number");
}
}
}
答案 0 :(得分:1)
表示xxx-xx-xxxx
x
代表数字\d\d\d-\d\d-\d\d\d\d
的正则表达式可以写成\
(注意:\d
字符串文字是特殊字符,所以如果你想使用它作为符号并传递给正则表达式引擎,您将需要将其转义,因此每个"\\d"
都需要写为yourString.matches(regex)
)。
现在您只需使用yourString
查看正则表达式是否匹配整个 String ssn = input.next();
if(ssn.matches("\\d\\d\\d-\\d\\d-\\d\\d\\d\\d")){
//
}
这么简单
{n}
应该可以正常工作。您还可以使用\d\d\d
来减少重复次数,以代表您可以写\d{3}
而不是Scanner
的数量。
另请注意,hasNext(regex)
支持正则表达式。因此,您只需使用next()
检查下一个令牌是否可以由正则表达式匹配。如果它不是简单地用System.out.print("Enter a SSN:");
while(!input.hasNext("\\d{3}-\\d{2}-\\d{4}")){
String invalid = input.next();
System.out.print(invalid + " is not valid SSN. Please try again:");
}
//outside this loop we are sure that valid SSN was provided
String ssn = input.next();
消费它并要求新的,如
tri1.equals(tri2);
答案 1 :(得分:0)
使用正则表达式:
String ssn = input.next();
String pattern = "[0-9]{3}-[0-9]{2}-[0-9]{4}";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(ssn);
if (m.find( )) {
System.out.println(ssn + " is an invalid social security number");
}else{
System.out.println(ssn + " is a valid social security number");
}
答案 2 :(得分:0)
如果你像我一样讨厌正则表达式,你也可以迭代字符,比较ASCII值。
public class HelloWorld{
public static void main(String []args){
System.out.println("Test A: " + checkSSN("123-45-6789"));
System.out.println("Test B: " + checkSSN("12a-45-6789"));
System.out.println("Test C: " + checkSSN("123-4"));
System.out.println("Test D: " + checkSSN("123-45-20303"));
}
public static boolean checkSSN(String ssn) {
int count = 0;
for (char c : ssn.toCharArray()) {
if (count == 3 || count == 6) {
if (c != '-') {
System.out.println("Character" + c + "Not a dash, returning false");
return false;
}
} else if (c < '0' || c > '9') {
System.out.println("NaN, return false");
return false;
}
count++;
}
if (count != 11) {
System.out.println("Doesn't meet length criteria");
return false;
}
return true;
}
}