/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
import java.util.regex.Pattern;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
{
String password
= "WhatAWonderfulWorldItWouldBe";
if (! isValidSSN(ssn)) {
System.
err.
println("Invalid SSN"); }
String xdSsn
= getObfuscatedSSN
(ssn
); System.
out.
println(isValidSSN
(ssn
) + " " + xdSsn
);
String xdPw
= getObfuscatedPassword
(password
); System.
out.
println(password.
length() + " " + xdPw
+ " " + xdPw.
length());
System.
out.
printf("%12s\t%s\t%s%n", user, xdSsn, xdPw
);
ssn = "12a-43-009";
System.
out.
println(isValidSSN
(ssn
)); ssn = "123-43-00900";
System.
out.
println(isValidSSN
(ssn
));
System.
out.
println("--user check--"); user = "blah";
System.
out.
println(isValidUsername
(user
)); user = "blah2";
System.
out.
println(isValidUsername
(user
));
user = " ";
System.
out.
println(isValidUsername
(user
)); user = "bl4h";
System.
out.
println(isValidUsername
(user
));
user = " me";
System.
out.
println(isValidUsername
(user
));
user = "me ";
System.
out.
println(isValidUsername
(user
));
user = "Jack Flash";
System.
out.
println(isValidUsername
(user
));
}
{
Objects.requireNonNull(pw, "Null pw input");
return pw.replaceAll(".", "X");
}
{
Objects.requireNonNull(ssn, "Null ssn input");
return ssn.replaceAll("[0-9]", "X");
}
public static boolean isValidSSN
(String ssn
) {
if (ssn == null || ssn.isEmpty()) {
return false;
}
// ensure in the format of ###-##-###
return Pattern.matches("[\\d]{3}-[\\d]{2}-[\\d]{3}", ssn);
}
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) {
charFound
= charFound
|| Character.
isLetter(name.
charAt(i
)); digitFound
= digitFound
|| Character.
isDigit(name.
charAt(i
)); }
return charFound && ! digitFound;
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CmltcG9ydCBqYXZhLnV0aWwucmVnZXguUGF0dGVybjsKCi8qIE5hbWUgb2YgdGhlIGNsYXNzIGhhcyB0byBiZSAiTWFpbiIgb25seSBpZiB0aGUgY2xhc3MgaXMgcHVibGljLiAqLwpjbGFzcyBJZGVvbmUKewoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBqYXZhLmxhbmcuRXhjZXB0aW9uCgl7CgkJU3RyaW5nIHVzZXIgPSAiamltaW4iOwoJCVN0cmluZyBzc24gPSAiMjIyLTExLTIyMiI7CgkJU3RyaW5nIHBhc3N3b3JkID0gIldoYXRBV29uZGVyZnVsV29ybGRJdFdvdWxkQmUiOwoJCQoJCWlmICghIGlzVmFsaWRTU04oc3NuKSkgewoJCQlTeXN0ZW0uZXJyLnByaW50bG4oIkludmFsaWQgU1NOIik7CgkJfQoJCQoJCVN0cmluZyB4ZFNzbiA9IGdldE9iZnVzY2F0ZWRTU04oc3NuKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oaXNWYWxpZFNTTihzc24pICsgIiAiICsgeGRTc24pOwoJCQoJCVN0cmluZyB4ZFB3ID0gZ2V0T2JmdXNjYXRlZFBhc3N3b3JkKHBhc3N3b3JkKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4ocGFzc3dvcmQubGVuZ3RoKCkgKyAiICIgKyB4ZFB3ICsgIiAiICsgeGRQdy5sZW5ndGgoKSk7CgoJICAgIFN5c3RlbS5vdXQucHJpbnRmKCIlMTJzXHQlc1x0JXMlbiIsIHVzZXIsIHhkU3NuLCB4ZFB3KTsKCSAgICAKCSAgICBzc24gPSAiMTJhLTQzLTAwOSI7CgkgICAgU3lzdGVtLm91dC5wcmludGxuKGlzVmFsaWRTU04oc3NuKSk7CiAgIAkgICAgc3NuID0gIjEyMy00My0wMDkwMCI7CgkgICAgU3lzdGVtLm91dC5wcmludGxuKGlzVmFsaWRTU04oc3NuKSk7CgkgICAgCgkgICAgU3lzdGVtLm91dC5wcmludGxuKCItLXVzZXIgY2hlY2stLSIpOwoJICAgIHVzZXIgPSAiYmxhaCI7CgkgICAgU3lzdGVtLm91dC5wcmludGxuKGlzVmFsaWRVc2VybmFtZSh1c2VyKSk7CgkgICAgdXNlciA9ICJibGFoMiI7CgkgICAgU3lzdGVtLm91dC5wcmludGxuKGlzVmFsaWRVc2VybmFtZSh1c2VyKSk7CgoJICAgIHVzZXIgPSAiICI7CgkgICAgU3lzdGVtLm91dC5wcmludGxuKGlzVmFsaWRVc2VybmFtZSh1c2VyKSk7CgkgICAgdXNlciA9ICJibDRoIjsKCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oaXNWYWxpZFVzZXJuYW1lKHVzZXIpKTsKCSAgICAKCSAgICB1c2VyID0gIiBtZSI7CgkgICAgU3lzdGVtLm91dC5wcmludGxuKGlzVmFsaWRVc2VybmFtZSh1c2VyKSk7CgoJICAgIHVzZXIgPSAibWUgIjsKCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oaXNWYWxpZFVzZXJuYW1lKHVzZXIpKTsKCSAgICAKCSAgICB1c2VyID0gIkphY2sgRmxhc2giOwoJICAgIFN5c3RlbS5vdXQucHJpbnRsbihpc1ZhbGlkVXNlcm5hbWUodXNlcikpOwoKCX0KCQoJCglwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRPYmZ1c2NhdGVkUGFzc3dvcmQoU3RyaW5nIHB3KQoJewoJCU9iamVjdHMucmVxdWlyZU5vbk51bGwocHcsICJOdWxsIHB3IGlucHV0Iik7CgkJcmV0dXJuIHB3LnJlcGxhY2VBbGwoIi4iLCAiWCIpOwoJfQoJCglwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRPYmZ1c2NhdGVkU1NOKFN0cmluZyBzc24pCgl7CgkJT2JqZWN0cy5yZXF1aXJlTm9uTnVsbChzc24sICJOdWxsIHNzbiBpbnB1dCIpOwoJCQoJCXJldHVybiBzc24ucmVwbGFjZUFsbCgiWzAtOV0iLCAiWCIpOwoJfQoJCglwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNWYWxpZFNTTihTdHJpbmcgc3NuKQoJewoJCWlmIChzc24gPT0gbnVsbCB8fCBzc24uaXNFbXB0eSgpKSB7CgkJCXJldHVybiBmYWxzZTsKCQl9CgkJCgkJLy8gZW5zdXJlIGluIHRoZSBmb3JtYXQgb2YgIyMjLSMjLSMjIwoJCXJldHVybiBQYXR0ZXJuLm1hdGNoZXMoIltcXGRdezN9LVtcXGRdezJ9LVtcXGRdezN9Iiwgc3NuKTsKCX0KCQoJcHVibGljIHN0YXRpYyBib29sZWFuIGlzVmFsaWRVc2VybmFtZShTdHJpbmcgbmFtZSkKCXsKCQlib29sZWFuIGNoYXJGb3VuZCA9IGZhbHNlOwoJCWJvb2xlYW4gZGlnaXRGb3VuZCA9IGZhbHNlOwoJCWlmIChuYW1lID09IG51bGwgfHwgbmFtZS5pc0VtcHR5KCkpIHsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCQkKCQlmb3IgKGludCBpID0gMDsgaSA8IG5hbWUubGVuZ3RoKCk7ICsraSkgewoJCQljaGFyRm91bmQgPSBjaGFyRm91bmQgfHwgQ2hhcmFjdGVyLmlzTGV0dGVyKG5hbWUuY2hhckF0KGkpKTsKCQkJZGlnaXRGb3VuZCA9IGRpZ2l0Rm91bmQgfHwgQ2hhcmFjdGVyLmlzRGlnaXQobmFtZS5jaGFyQXQoaSkpOwoJCX0KCQkKCQlyZXR1cm4gY2hhckZvdW5kICYmICEgZGlnaXRGb3VuZDsKCX0KfQ==