2013-10-02 38 views
-5

我是新来的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(,)); 

    } 
    } 

这是新的代码

进口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

你为什么以整数的形式读取社会安全号码?你想格式化它(不使用它进行计算),所以不妨将它看作字符串。 – arshajii

+0

你知道String concatenation吗?你可以写“a”+“b”,它会返回“ab”作为字符串。类似的,如果String a =“a”,并且String b =“b”,则String c = a + b将使String c为“ab”。这个问题的其余部分是微不足道的,如果你明白,在我看来,和String类的'charAt()'方法。 – Kon

+0

@Kon ya我知道,那么你会如何正确使用它,请以真实的代码形式写出来,而不仅仅是解释它。 –

回答

2

其实一个更合适的方式来做到这一点是使用一个MatcherPattern代表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
+0

感谢您的帮助,但我只想使用字符串,因为我们还没有学会如何使用匹配器。所以你可以用字符串来写。谢谢:) –

+0

@ShadonHamedani使用'substring()'非常简单 - 你遇到什么问题?只需使用适当的索引进行3个独立的子字符串调用,并将结果与​​中间的“ - ”进行连接。 – arshajii

+0

即时通讯新所有这一切如此裸露与我,我将如何添加破折号的子串? –