问题
代码如下:
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(dateString);
if (matcher.find()) {
String year = matcher.group(1);
}
在调试时,明明在自定义表达式监视matcher.group(1)
中看到匹配成功的结果,可执行时,却未匹配到,获取不到year变量值;明明在我没添加表达式监视时,至少还能正常运行;明明在正则测试器中结果正确…
问题就出现在这些“明明”上。matcher.find在idea表达式监视中执行一次后,匹配到的定位索引就会更新。
总结:
- matcher.find的执行会引起索引位置的更新。除非使用matcher.find(0),强制从头开始使用索引。
- idea 表达式监控会改变运行环境
- 遇事别慌张更别疑神疑鬼,你使用的编程工具没有那么不堪。问题就是你自己:
- 先回溯自己做过什么
- 别太自信,不要多处代码变更后才做测试
- 最最重要的是提高自己的基本功,遇到问题时先看你使用的API的源码,深刻理解人家的运行机理。
参考
https://zhuanlan.zhihu.com/p/142846161