为啥我无法将程序中找到的布尔结果的正确值分配给布尔变量并使用结果检查条件?

Posted

技术标签:

【中文标题】为啥我无法将程序中找到的布尔结果的正确值分配给布尔变量并使用结果检查条件?【英文标题】:Why am I not able to assign the correct value of boolean result found in the program, to a boolean variable and to check a condition with the result?为什么我无法将程序中找到的布尔结果的正确值分配给布尔变量并使用结果检查条件? 【发布时间】:2022-01-12 06:37:42 【问题描述】:

我在 log.d 时接收到的值为 true,但是当我将值分配给布尔变量时,它会变为 false,而且我也无法使用该值执行 if 条件,因为它也显示错误的。那就是我只能在日志中将值设为真,不知道如何将值传递给变量或检查某些条件。此代码用于验证电话号码:

Log.d("testi3", "id " + edit_number.getText());

    if (number.isEmpty()) 
        Log.d("testi3", "id empty" + edit_number.getText());
        edit_number.setError(getResources().getString(R.string.phone_error));
        isPhoneValid = false;
     else 
        Log.d("testi3", "id else " + edit_number.getText());

        Pattern ptrn = Pattern.compile("[7-9][0-9]9");

        Matcher match = ptrn.matcher(number);

        Log.d("testi3", "id else 1 " + (match.find() && match.group().equals(number)));
        isPhoneValid = (match.find() && match.group().equals(number));
        Log.d("testi3", "id else validi" + isPhoneValid);

        if ((match.find() && match.group().equals(number))) 
            Log.d("testi3", "id else 2 " + (match.find() && match.group().equals(number)));
            isPhoneValid = true;
         else 
            Log.d("testi3", "id else 3 " + (match.find() && match.group().equals(number)));
            edit_number.setError(getResources().getString(R.string.phone_error));
            isPhoneValid = false;
        
    

这是输入数字作为输入时的 logcat:

D/testi3: id 9048857563
D/testi3: id else 9048857563
D/testi3: id else 1 true
D/testi3: id else validi false
D/testi3: id else 3 false

【问题讨论】:

【参考方案1】:

matcher 是通过调用模式的匹配器方法从模式创建的。创建后,匹配器可用于执行三种不同类型的匹配操作:

matches 方法尝试匹配整个输入序列 反对模式。 lookingAt 方法尝试匹配输入序列,开始 一开始,违背规律。 find 方法扫描输入序列寻找下一个 匹配模式的子序列。

这些方法中的每一个都返回一个指示成功或失败的布尔值。更多关于匹配成功的信息可以通过查询匹配器的状态来获得。

匹配 - 尝试将整个区域与模式匹配。 如果匹配成功,则可以通过 start、end 和 group 方法获取更多信息。 在您的场景中,当您第一次使用 (match.find() && match.group().equals(number))) 匹配模式时 - 发现匹配成功并更新 matcher 中的值,更具体地说,更新 matchFoundgroup 值。下次使用相同的匹配器组比较值不满足条件,因此导致错误。

您可以使用match.matches()检查匹配是否成功,以便下次使用匹配而不是再次比较。或者您可以使用reset()方法重置匹配器

【讨论】:

你也可以调试你的代码来验证相同的,你会看到第一次成功匹配后值发生了变化。

以上是关于为啥我无法将程序中找到的布尔结果的正确值分配给布尔变量并使用结果检查条件?的主要内容,如果未能解决你的问题,请参考以下文章

否定一个布尔变量并将其分配给一个新变量[重复]

断言失败:布尔表达式不能为空(即使布尔变量分配给真/假)

为啥 ~(true^true) 不正确?布尔运算符(否定)适用于“无符号字符”,但不适用于布尔值? (C++)

如何将从函数返回的布尔值分配给 PostgreSQL 9.4 中的变量?

布尔值未在 Hibernate 中与 MySQL 正确映射

在ajax中发送时无法获得正确的布尔值[重复]