【问题标题】:Advice, writing a social security code建议,编写社会保障代码
【发布时间】:2013-10-08 07:35:59
【问题描述】:

我是 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);

}
}

【问题讨论】:

  • 您为什么将社会安全号码读取为整数?您想对其进行格式化(而不是对其进行计算),因此不妨将其作为字符串读取。
  • 你知道字符串连接吗?你可以写“a”+“b”,它会以字符串形式返回“ab”。类似地,如果字符串 a = "a",并且字符串 b = "b",则字符串 c = a + b 将使字符串 c 为 "ab"。在我看来,如果您理解这一点以及 String 类的 charAt() 方法,那么这个问题的其余部分是微不足道的。
  • @Kon ya 我知道,那你具体怎么改,请用真实的代码形式写出来,而不是解释它。

标签: java substring reformat


【解决方案1】:

实际上,更合适的方法是使用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

【讨论】:

  • 感谢您的帮助,但我只想使用字符串,因为我们还没有学会如何使用匹配器。所以你能不能只用字符串来写。谢谢:)
  • @ShadonHamedani 使用substring() 非常简单——您遇到了哪些问题?只需使用适当的索引进行 3 个单独的子字符串调用,并将结果与​​"-"s 连接起来。
  • 我太新了,这对我来说太简单了,我如何将破折号添加到子字符串中?
  • @ShadonHamedani 使用substring() 提取组后,您可以使用group1 + '-' + group2 + '-' + group3
  • substring1 + "-" + substring2
猜你喜欢
  • 1970-01-01
  • 2016-09-20
  • 1970-01-01
  • 2011-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-25
相关资源
最近更新 更多