[英]Validate is a string is empty using Scanner and return the empty string as valid value
我使用 Java 中的 Scanner 來獲取用戶條目,例如姓名、電子郵件和電話。 姓名和姓氏是必需的,但電子郵件和電話不是必需的,用戶只需按回車鍵即可將它們留空。
這是我用來驗證每個條目的長度並在長度低於或高於 lngMin 或 lngMax 時顯示錯誤消息的方法。
public static String validateString (String msgSoll, String msgErr,
int lngMin, int lngMax) {
String myString = null;
if (lngMin >= 0 && lngMax >= lngMin) {
do {
System.out.print(msgSoll);
myString = myScanner.nextLine();
if (myString.length() < lngMin || myString.length() > lngMax) {
System.out.println(msgErr);
}
} while (myString.length() < lngMin || myString.length() > lngMax);
}
return myString;
}
我有這個方法來驗證電子郵件,我調用了 validateString 方法和其他方法來驗證電子郵件是否包含至少 1 個點和一個 @ 以及特殊字符和數字字符。 在這種方法中,我想驗證電子郵件是否為空,以及是否返回空電子郵件作為有效值。
public static String validateEmail() {
String email = null;
String validEmail = null;
boolean isAlpha = false;
do {
email = validateString(MSG_SOLL_COURRIEL, MSG_ERR_COURRIEL, 5, 50);
isAlpha = Tp2Utils.isAlphaNumPlus(email, "@,.,_") && Tp2Utils.hasNChar(email, '.') >= 1 && Tp2Utils.hasNChar(email, '@') == 1;
if (isAlpha) {
validEmail = email;
}
} while (!isAlpha);
return validEmail;
}
我有這種方法來驗證電話,其中我使用了一種方法來驗證 tel 是否僅包含數字字符。 在該方法中,我還需要驗證 tel 是否為空,如果是這種情況,則將空 tel 作為有效值返回。
public static String validateTel() {
boolean telValid = false;
String tel = null;
String telVal;
do {
tel = validateString(MSG_SOLL_TEL, MSG_ERR_TEL, 10, 10);
telValid = Tp2Utils.containsOnlyNums(tel);
} while (!telValide);
telVal = tel;
return telVal;
}
如果有人可以幫助我解決驗證問題,我將不勝感激。
謝謝
更新(感謝Joakim Danielson ):
雖然添加了新參數, boolean mandatory
lngMin
會保持代碼不那么混亂和干凈,但即使處理lngMin
的值也可以解決這個問題
public static String validateString (String msgSoll, String msgErr, int lngMin, int lngMax) {
String myString = null;
if (lngMin >= 0 && lngMax >= lngMin) {
do {
System.out.print(msgSoll);
myString = myScanner.nextLine();
// Return a blank string if the min required length is 0
if (lngMin == 0 && myString.isBlank()) {
return myString;
}
if (myString.length() < lngMin || myString.length() > lngMax) {
System.out.println(msgErr);
}
} while (myString.length() < lngMin || myString.length() > lngMax);
}
return myString;
}
然后,你稱之為
public static String validateEmail() {
String email = null;
String validEmail = null;
boolean isAlpha = false;
do {
email = validateString(MSG_SOLL_COURRIEL, MSG_ERR_COURRIEL, 0, 50);
if (email.isBlank()) {
return email;// Return blank
}
isAlpha = Tp2Utils.isAlphaNumPlus(email, "@,.,_") && Tp2Utils.hasNChar(email, '.') >= 1 && Tp2Utils.hasNChar(email, '@') == 1;
if (isAlpha) {
validEmail = email;
}
} while (!isAlpha);
return validEmail;
}
原答案:
您可以在方法簽名中放置一個布爾參數,例如boolean mandatory
。 如果為此參數傳遞false
,則該方法應返回一個空字符串,以防用戶按Enter 鍵而不輸入任何值。
public static String validateString (String msgSoll, String msgErr, int lngMin, int lngMax, boolean mandatory) {
String myString = null;
if (lngMin >= 0 && lngMax >= lngMin) {
do {
System.out.print(msgSoll);
myString = myScanner.nextLine();
// Return a blank string if not mandatory
if (!mandatory && myString.isBlank()) {
return myString;
}
if (myString.length() < lngMin || myString.length() > lngMax) {
System.out.println(msgErr);
}
} while (myString.length() < lngMin || myString.length() > lngMax);
}
return myString;
}
然后,你稱之為
public static String validateEmail() {
String email = null;
String validEmail = null;
boolean isAlpha = false;
do {
email = validateString(MSG_SOLL_COURRIEL, MSG_ERR_COURRIEL, 5, 50, false);
if (email.isBlank()) {
return email;// Return blank
}
isAlpha = Tp2Utils.isAlphaNumPlus(email, "@,.,_") && Tp2Utils.hasNChar(email, '.') >= 1 && Tp2Utils.hasNChar(email, '@') == 1;
if (isAlpha) {
validEmail = email;
}
} while (!isAlpha);
return validEmail;
}
完整的解決方案:
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String name = getValidatedField(in, "Enter your name: ", Validators.NAME_VALIDATOR);
String surname = getValidatedField(in, "Enter your surname: ", Validators.NAME_VALIDATOR);
String email = getValidatedField(in, "Enter your email: ", Validators.EMAIL_VALIDATOR);
String phone = getValidatedField(in, "Enter your phone: ", Validators.PHONE_VALIDATOR);
// process your validated fields here
}
private static String getValidatedField(Scanner in, String message, Function<String, ValidationResult> validationRule) {
ValidationResult validationResult;
String input;
do {
System.out.println(message);
input = in.nextLine();
validationResult = validationRule.apply(input);
System.out.println(validationResult.getMessage());
} while (!validationResult.isSuccess());
return input;
}
}
class Validators {
private static final String WRONG_LENGTH_MSG = "Invalid length.";
private static final String WRONG_FORMAT_MSG = "Wrong format.";
private static final String EMAIL_PATTERN = "(^$|^[A-Za-z0-9]+@[A-Za-z0-9]+\\.[A-Za-z]+$)";
private static final String NAME_PATTERN = "^[A-Za-z ,.'-]*$";
private static final String ONLY_NUMBERS_PATTERN = "^[0-9]*$";
private static boolean checkMinMaxLength(final String input, int min, int max) {
int length = input.length();
return length < min || length > max;
}
public static Function<String, ValidationResult> NAME_VALIDATOR = input ->
{
final ValidationResult result;
if (checkMinMaxLength(input, 1, 10)) {
result = ValidationResult.failure().message(WRONG_LENGTH_MSG);
} else if (!input.matches(NAME_PATTERN)) {
result = ValidationResult.failure().message(WRONG_FORMAT_MSG);
} else {
result = ValidationResult.success();
}
return result;
};
public static Function<String, ValidationResult> PHONE_VALIDATOR = input ->
{
final ValidationResult result;
if (!StringUtils.isBlank(input)) {
if (checkMinMaxLength(input, 2, 11)) {
result = ValidationResult.failure().message(WRONG_LENGTH_MSG);
} else if (!input.matches(ONLY_NUMBERS_PATTERN)) {
result = ValidationResult.failure().message(WRONG_FORMAT_MSG);
} else {
result = ValidationResult.success();
}
} else {
result = ValidationResult.success();
}
return result;
};
public static Function<String, ValidationResult> EMAIL_VALIDATOR = input ->
{
final ValidationResult result;
if (!StringUtils.isBlank(input)) {
if (checkMinMaxLength(input, 4, 20)) {
result = ValidationResult.failure().message(WRONG_LENGTH_MSG);
} else if (!input.matches(EMAIL_PATTERN)) {
result = ValidationResult.failure().message(WRONG_FORMAT_MSG);
} else {
result = ValidationResult.success();
}
} else {
result = ValidationResult.success();
}
return result;
};
private Validators() {
}
}
class ValidationResult {
private static final String OK_MSG = "OK";
private final boolean success;
private String message;
public ValidationResult(boolean success) {
this.success = success;
}
public ValidationResult(boolean success, String message) {
this.success = success;
this.message = message;
}
public static ValidationResult success() {
return new ValidationResult(Boolean.TRUE, OK_MSG);
}
public static ValidationResult failure() {
return new ValidationResult(Boolean.FALSE);
}
public ValidationResult message(String message) {
this.message = message;
return this;
}
public boolean isSuccess() {
return success;
}
public String getMessage() {
return message;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.