当日志处理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
中的值,更具体地说,更新matchFound
和group
值。下次使用相同的匹配器组比较值时,不满足条件,因此导致false。
您可以使用match.matches()
来检查匹配是否成功,以便下次使用匹配,而不是再次进行比较
或者您可以使用reset()
方法重置匹配器