我是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);
}
}
答案 0 :(得分:2)
实际上,更合适的方法是使用Matcher
代表Pattern
的regex,其中包含社会安全号码的子组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。