Java:如何检查字符串是否仅包含数字和连字符

时间:2016-10-17 23:00:51

标签: java

我只需要一个必须读取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");
  }

  }
}

3 个答案:

答案 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;
 }

}