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



当日志处理logcat时,我收到的值为true,但当我将值分配给布尔变量时,它会变为false,而且我无法对该值执行if条件,因为它也显示为false。也就是说,我只能在日志中获得true的值,不知道如何将该值应用于变量或检查某些条件。此代码用于验证电话号码:

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

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

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

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

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

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

相关内容

  • 没有找到相关文章