[英]Java: How to check if a string contains only numbers and hyphens
我只是有一個程序必須讀取 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
正則表達式,其中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")){
//here we know that `snn` is valid
}
應該可以正常工作。
您可以使用quantifiers使您的正則表達式更具可讀性。 例如,使用{n}
我們可以表示前一個元素必須出現多少次。 所以我們可以寫\d{3}
而不是\d\d\d
。
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:");
}
//here we are sure that data provided by user represent valid SSN
String ssn = input.next();
使用正則表達式:
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");
}
如果你和我一樣討厭正則表達式,你也可以通過比較字符來迭代 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;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.