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

2023-12-05

我只是有一个程序,必须读取 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(使用前将#替换为@)

Java:如何检查字符串是否仅包含数字和连字符 的相关文章

随机推荐