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

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?

当 log.d ing logcat 时,我收到的值为 true,但是当我将该值分配给布尔变量时,它变为 false,而且我无法执行 if 条件其值也显示为 false。那就是我只能在日志中获取 true 值,不知道如何将值取到变量或检查某些条件。此代码用于验证 phone 数字:

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

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

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

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

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

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