问题 编写一个程序,读取一行包含学生的姓名,社会保险号,用户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"); }
答案 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
使用更好的变量名将是一件好事。