我如何使用此格式000-00-000输入

时间:2019-03-26 17:47:00

标签: java

问题 编写一个程序,读取一行包含学生的姓名,社会保险号,用户ID和密码(由一个空格分隔)的行。程序输出一个字符串,其中社会安全号码的所有数字以及密码中的所有字符都用x替换。(社会安全号码的格式为000-00-000,而用户ID和密码不包含任何空格,并且名称不包含任何数字。)

例如 输入:用户输入:jimin 222-11-222 jimin22 jim2000 说明:jimin是用户名-不应包含任何数字- 222-11-22是格式为“ 000-00-000”的社会保险号 jimin22是用户标识 jim2000是用户密码

输出应该像 输出:jimin xxx-xx-xxx jimin22 xxxxxxx

我不知道名字怎么没有数字
而且我不知道如何以“ 000-00-000”格式输出社会保险号

Scanner input=new Scanner(System.in);
      String name,So_n,ue_id,password;
      int x;
     ////to input
      name=input.next();
      So_n=input.next();
      ue_id=input.next();
      password=input.next();
      ///to output
      System.out.print(name+"\t");
      x = So_n.length();
      for(int i=0;i<x;i++){
          System.out.print("x"); }
          System.out.print("\t");
      System.out.print(ue_id+"\t");
      x = password.length();
      for(int i=0;i<x;i++){
          System.out.print("x"); }

2 个答案:

答案 0 :(得分:0)

要替换SSO中的数字,请执行以下操作:

    x = So_n.length();
    for (int i = 0; i < x; i++) {
        if ('0' <= So_n.charAt(i) && So_n.charAt(i) <= '9') {
            System.out.print("x");
        } else {
            System.out.print(So_n.charAt(i));
        }
    }

答案 1 :(得分:0)

问题的症结似乎是替换字符,而不是仅打印一些“ X”字符。因此,处理替换的方法将是最合适的。

这里有一些示例方法可以解决OP的问题。可以轻松添加用于验证用户名和其他复杂性的密码等其他方法。没有提供有关输入无效时该怎么办的详细信息,因此这里的一种情况只是发出一条消息。

// for a non-null password, return a String of the same length with all
//   of the characters set to an 'X'
public static String getObfuscatedPassword(String pw)
{
    Objects.requireNonNull(pw, "Null pw input");
    return pw.replaceAll(".", "X");
}

// for a non-null ssn, return a String where every digit is replaced
//   by an 'X'; other characters (such as a -) are unchanged
public static String getObfuscatedSSN(String ssn)
{
    Objects.requireNonNull(ssn, "Null ssn input");

    return ssn.replaceAll("[0-9]", "X");
}

// return true if the specified ssn is not null and
//   matches the format of ###-##-###
public static boolean isValidSSN(String ssn)
{
    // ensures there is something for us to validate
    //   NOTE: technically the .isEmpty is not needed
    if (ssn == null || ssn.isEmpty()) {
        return false;
    }

    // ensure in the format of ###-##-###
    return Pattern.matches("[\\d]{3}-[\\d]{2}-[\\d]{3}", ssn);
}

// returns true if the username has at least one character, and
//  no digits; does not prevent having spaces in the name (could
//  be added); uses a for loop rather than regular expressions for
//  a fun difference in approach
public static boolean isValidUsername(String name)
{
    boolean charFound = false;
    boolean digitFound = false;
    if (name == null || name.isEmpty()) {
        return false;
    }

    for (int i = 0; i < name.length(); ++i) {
        // check if the current name[i] is a letter or digit
        //  the OR will keep a true once it is set
        charFound = charFound || Character.isLetter(name.charAt(i));
        digitFound = digitFound || Character.isDigit(name.charAt(i));
    }

    return charFound && ! digitFound;
}

驱动程序示例:

public static void main (String[] args) throws java.lang.Exception
{
    String user = "jimin";
    String ssn = "222-11-222";
    String password = "WhatAWonderfulWorldItWouldBe";

    if (! isValidSSN(ssn)) {
        System.err.println("Invalid SSN");
    }

    String xdSsn = getObfuscatedSSN(ssn);

    String xdPw = getObfuscatedPassword(password);

    System.out.printf("%12s\t%s\t%s%n", user, xdSsn, xdPw);

}

样本输出:

  jimin   XXX-XX-XXX  XXXXXXXXXXXXXXXXXXXXXXXXXXXX

使用更好的变量名将是一件好事。

在线示例:https://ideone.com/cPV2ob