建议,编写社会保障代码

时间:2013-10-02 00:21:18

标签: java substring reformat

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

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

import 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(,) );

   }
   }

这是新代码

import 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);

}
}

1 个答案:

答案 0 :(得分:2)

实际上,更合适的方法是使用Matcher代表Patternregex,其中包含社会安全号码的子组capturing groups

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!");
}

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


现在,在您的新代码中,您几乎就在那里,但仍有一些问题:

  • 它是String,而不是string
  • 现在ssn是一个字符串,您无法将其分配给reader.nextInt()的结果,因为它会返回int。相反,您需要使用reader.nextLine()
  • 第二次和第三次substring()来电的范围略有偏差。请参阅方法的documentation