我只是有一个程序,必须读取 ssn (xxx-xx-xxxx) 并确定给定的 ssn 是否有效。我只需要一种方法来检查字符串是否只包含 # 和 - 。
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");
}
}
}
正则表达式代表xxx-xx-xxxx
where x
代表数字可以写成\d\d\d-\d\d-\d\d\d\d
(note: \
字符串文字中是特殊字符,因此如果您想将其用作符号并传递给正则表达式引擎,则需要使用另一个字符对其进行转义\
,所以表示的字符串文字\d
需要写成"\\d"
).
现在您可以简单地使用yourString.matches(regex)
查看正则表达式是否匹配whole yourString
很简单
String ssn = input.next();
if(ssn.matches("\\d\\d\\d-\\d\\d-\\d\\d\\d\\d")){
//here we know that `snn` is valid
}
应该可以正常工作。
改进:
您可以使用以下方法使您的正则表达式更具可读性量词。例如与{n}
我们可以表达前一个元素必须出现的次数。所以而不是\d\d\d
我们可以写\d{3}
.
Also Scanner
有支持正则表达式的方法,例如hasNext(regex)
检查下一个标记是否可以通过正则表达式匹配。如果不是,我们可以简单地consume它使用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:");
}
//here we are sure that data provided by user represent valid SSN
String ssn = input.next();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)