JAVA中验证字段的更好方法

JAVA中验证字段的更好方法,java,validation,if-statement,Java,Validation,If Statement,我正在为一个学校项目做一个预订系统。在本文中,我需要验证一些字段,并想知道是否有更好/更有效的方法来实现这一点 输入示例: String firstName = "Alex"; String surname = "Smith"; int numberOfGuests = 3; int numberOfPets = 2; String email = "alexSmith@gmail.com"; 验证: final int GUEST_MIN = 1; int guestMax = 4; fin

我正在为一个学校项目做一个预订系统。在本文中,我需要验证一些字段,并想知道是否有更好/更有效的方法来实现这一点

输入示例:

String firstName = "Alex";
String surname = "Smith";
int numberOfGuests = 3;
int numberOfPets = 2;
String email = "alexSmith@gmail.com";
验证:

final int GUEST_MIN = 1;
int guestMax = 4;
final int PETS_MIN = 0;
int petsMax = 4;
boolean presenceCheck = false;
boolean rangeCheck = false;
boolean formatCheck = false;

//Presence Check
if(!(firstName.isEmpty() || surname.isEmpty() || email.isEmpty()))
{
    presenceCheck = true;
}
System.out.println(presenceCheck);

//RangeCheck
if(!(numberOfGuests < GUEST_MIN || numberOfGuests > guestMax || numberOfPets < PETS_MIN || numberOfPets > petsMax))
{
    rangeCheck = true;
}
System.out.println(rangeCheck);

//Format Check
if(email.contains("@"))
{
    formatCheck = true;
}
System.out.println(formatCheck);
final int GUEST_MIN=1;
int guestMax=4;
最终积分最小值=0;
int-petsMax=4;
布尔存在检查=假;
布尔值范围检查=假;
布尔formatCheck=false;
//在场检查
if(!(firstName.isEmpty()| |姓氏.isEmpty()| | | email.isEmpty())
{
presenceCheck=true;
}
系统输出打印项次(显示检查);
//范围检查
如果(!(numberOfGuestsguestMax | numberOfPetspetsMax))
{
rangeCheck=true;
}
系统输出打印项次(范围检查);
//格式检查
if(email.contains(“@”))
{
formatCheck=true;
}
System.out.println(formatCheck);

我计划对此进行补充,并想知道是否有一种方法可以避免多行if语句。

如果目的是减少行数,则直接将布尔输出分配给变量,如下所示

presenceCheck = (!(firstName.isEmpty() || surname.isEmpty() || email.isEmpty()));

rangeCheck = (!(numberOfGuests < GUEST_MIN || numberOfGuests > guestMax || numberOfPets < PETS_MIN || numberOfPets > petsMax));

formatCheck = (email.contains("@"));
    presenceCheck = (!(firstName.isEmpty() || surname.isEmpty() || email.isEmpty())) ? true:false; 
    rangeCheck = (!(numberOfGuests < GUEST_MIN || numberOfGuests > guestMax || numberOfPets < PETS_MIN || numberOfPets > petsMax)) ? true : false; 
formatCheck = (email.contains("@"))? true :false;
presenceCheck=(!(firstName.isEmpty()| |姓氏.isEmpty()| | email.isEmpty());
范围检查=(!(numberOfGuestsguestMax | numberOfPetspetsMax));
formatCheck=(email.contains(“@”);
如果您希望使用三元运算符更清晰,请使用如下

presenceCheck = (!(firstName.isEmpty() || surname.isEmpty() || email.isEmpty()));

rangeCheck = (!(numberOfGuests < GUEST_MIN || numberOfGuests > guestMax || numberOfPets < PETS_MIN || numberOfPets > petsMax));

formatCheck = (email.contains("@"));
    presenceCheck = (!(firstName.isEmpty() || surname.isEmpty() || email.isEmpty())) ? true:false; 
    rangeCheck = (!(numberOfGuests < GUEST_MIN || numberOfGuests > guestMax || numberOfPets < PETS_MIN || numberOfPets > petsMax)) ? true : false; 
formatCheck = (email.contains("@"))? true :false;
presenceCheck=(!(firstName.isEmpty()| |姓氏.isEmpty()| | email.isEmpty())?真:假;
范围检查=(!(numberOfGuestsguestMax | | numberOfPetspetsMax))?真:假;
formatCheck=(email.contains(“@”)?真:假;

您的验证也存在一些问题

如果字符串为
null
,该怎么办?字符串是什么

对于
presenceCheck
,最好编写一个函数:

public static boolean empty(List<String> strings) {
    // Null-safe, short-circuit evaluation.
    // .trim() removes the whitespace from front and back
    // if anyString is null or empty or space, it will return true, else false
    return strings.stream().anyMatch(s -> s == null || s.trim().isEmpty());
}
没有比这更好的解决方案了。除按如下方式移除外:

rangeCheck = (!(numberOfGuests < GUEST_MIN || numberOfGuests > guestMax || numberOfPets < PETS_MIN || numberOfPets > petsMax));

如果需要重复使用相同的验证,可以将单个测试生成函数,或者生成一个类来包含在设置属性时验证属性的数据。最后,每个测试都将植根于一个if语句中。javax验证对学校项目来说是否过份了?三元运算符在哪里?这是如何比已有的改进的?没有三元,但其中一个问题是减少所有if语句,因此上述答案在要求方面是一个显著的改进。那么请不要在答案中提及三元,因为您的答案没有使用它。@HarshalParekh,我已更正了我的原始评论。添加了另一个带有三元运算符的注释。您应该将其添加到答案中,而不是添加到注释中