Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 简单方法验证_Java - Fatal编程技术网

Java 简单方法验证

Java 简单方法验证,java,Java,我有一个验证和标识的方法,我发现了一个问题。 ID必须遵循以下规则才能有效: 正好有6个字符 必须以A、E或P开头。 代码如下: public static String getCartId(String cartId) { Boolean correctId = false; while (!correctId) { cartId = JOptionPane.showInputDialog("Type the Cart ID:"); cartI

我有一个验证和标识的方法,我发现了一个问题。 ID必须遵循以下规则才能有效:

正好有6个字符 必须以A、E或P开头。 代码如下:

public static String getCartId(String cartId) {
    Boolean correctId = false;

    while (!correctId) {
        cartId = JOptionPane.showInputDialog("Type the Cart ID:");
        cartId = cartId.trim();
        cartId = cartId.toUpperCase();
        char c = cartId.charAt(0);

        // VALIDATION
        if (cartId.length() != 6)
            JOptionPane.showMessageDialog(null, "Cart ID must have only 6 chars, type it again.");
        else if (c != 'A' || c != 'E' || c != 'P')
            JOptionPane.showMessageDialog(null, "Invalid Cart ID, type it again.");
        else
            correctId = true;
    }
    return cartId;
}
如果我输入aaaaa,它会说这个ID无效

有什么不对劲吗?

试着替换这个:

  else if (c != 'A' || c != 'E' || c != 'P')
使用&&代替| |如下:

  else if (c != 'A' && c != 'E' && c != 'P')

在验证第一个字母之前,将整个字符串转换为大写。因此,如果您输入aaaaaa,您将尝试验证aaaaaa

我相信您最好像这样使用regexp:

if (cartId.matches("(?s)([AEP]{1}[A-Z0-9]{5})")) {
...}

这种情况的发生是因为| |是短路操作员

就你而言

如果c!='A'| | c!='E'| | c!='P'

这里是c!='A'返回false。所以它检查下一个条件c!='它返回true,因此它将您的id设置为无效

试着将其替换为&&

或者,如果您想尝试另一种方法,只需在google上搜索正则表达式,然后使用[ACP]。。。。。作为正则表达式。它将把您的代码减少到只有两行验证。

您已经使用了

(c != 'A' || c != 'E' || c != 'P')
这是不对的

根据您的要求,如果c不等于A、E或p, 只有这样,它才能将其打印为无效。但| |所做的是,如果给定条件中的任何一个为真,则返回真。这意味着,如果c='A',第一个条件为false,但其他两个条件为true,则整个if语句的值返回为true。 取而代之的是

(c != 'A' && c != 'E' && c != 'P')
将有帮助,因为只有当所有条件都为真时,它才会返回真。因此,如果c='A',第一个条件为false,则返回整个if语句false。
希望你明白我的意思。

没什么,根据你的说明aaaaaa以小写a开头,不在允许的a、E或p集合中。但在得到第一个字母之前,我将方法放在大写字母上,变量c存储“a”,你在测试我的答案吗?@Abdelhak yes,如果我输入AAAAA,它仍然显示它对我无效如果我输入打印AAAAA,我将全部转换为大写,然后在我将第一个字母存储在变量c中后,变量c有字母“A”,然后它被验证,这是正确的吗?很抱歉,这取决于您是否希望验证区分大小写。如果你不在乎,希望AAAAA和AAAAA都作为输入传递,这是非常好的。有可能有两个这样的验证,一个是长度验证,一个是第一个字母验证吗?我想告诉用户ID有什么问题:-您可以在regexp修订之前检查字符串长度,如果需要,它没有限制。在这里使用regexp的任何方法都更方便,因为您不需要char变量,并且不必检查多个参数。例如,今天你的ID必须以A、E或P开头,如果明天字母数量增加,你的if语句可能会变得笨重。。关于技巧,我刚刚开始学习Java,还没有检查正则表达式,但可以肯定的是,正如我在这里看到的那样,这将是一个更好的解决方案:-谢谢,它现在工作得很好。。。我仍然在学习java,我认为使用或将有意义,而不是使用AND,但是使用&&很有魅力,仍然需要学习一些逻辑呵呵,谢谢!谢谢你的解释,现在对我来说有意义了:-我之前已经把答案标记为完整的,但是你的答案肯定是上等的,帮了我很多忙!非常感谢,是的,我后来才明白,还在学习Java,谢谢你的帮助!
(c != 'A' && c != 'E' && c != 'P')