我是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);
}
}
实际上,更合适的方法是使用带有Pattern
的Matcher
,该表示包含社会保险号子组作为捕获组的正则表达式:
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()
调用的范围略有偏差。 请参阅该方法的文档。