-5

我是 Java 新手,我的班级需要编写一个程序,用户在其中输入 XXXXXXXXX 形式的社会保障代码,并以 XXXX-XX-XXX 的形式返回它。例如,如果代码是 123456789,它将作为 123-45-6789 返回给他们。

这就是我所拥有的,我想使用子字符串来完成它。

导入 java.util.Scanner;

public class HWSocialSecuritySh  {
public static void main (String [] args) {
    Scanner reader = new Scanner (System.in);

    String name;
    int ssn;
    System.out.print ("Enter nine digit social security number without dashes: ");
    ssn= reader.nextInt();
    System.out.print("Your formatted social security number is: ");
    System.out.println(snn.substring(,) );

   }
   }

这是新代码

导入 java.util.Scanner;

public class HWSocialSecuritySH  {
public static void main (String [] args) {
    Scanner reader = new Scanner (System.in);

    String name;
    String Ssn="ssn";

    System.out.print ("Enter nine digit social security number without dashes: ");
    Ssn= reader.nextLine();
    System.out.print("Your formatted social security number is: ");
    System.out.println (Snn.substring(0,3) +"-"snn.substring(4,6) + "-"snn.substring(7,9);

}
}
4

1 回答 1

2

实际上,更合适的方法是使用 aMatcher和 aPattern表示正则表达式,其中包含社会安全号码的子组作为捕获组

final Pattern ssnFormat = Pattern.compile("^(\\d{3})(\\d{2})(\\d{4})$");

Matcher m = ssnFormat.matcher(ssn);  // make ssn a string!

if (m.find()) {
    System.out.printf("%s-%s-%s%n", m.group(1), m.group(2), m.group(3));
} else {
    System.err.println("Enter a valid social security number!");
}

如前所述,社会安全号码虽然可以表示为整数,但实际上是一串数字:它作为数字毫无意义。因此,您应该将其存储为aString不是int.


现在,在您的新代码中,您几乎完成了,但仍有一些问题:

  • String,不是string
  • 现在这ssn是一个字符串,您不能将它分配给 的结果reader.nextInt(),因为它返回一个int. 相反,您需要使用reader.nextLine().
  • 第二次和第三次substring()调用的范围略有偏差。请参阅该方法的文档
于 2013-10-02T00:27:12.700 回答