您好!
欢迎来到京东云开发者社区
登录
首页
博文
课程
大赛
工具
用户中心
开源
首页
博文
课程
大赛
工具
开源
更多
用户中心
开发者社区
>
博文
>
Insight Spring中的算法-占位符查找
分享
打开微信扫码分享
点击前往QQ分享
点击前往微博分享
点击复制链接
Insight Spring中的算法-占位符查找
京东物流质控队
2021-01-07
IP归属:未知
71320浏览
计算机编程
```java /** - 查找占位符匹配的后缀索引。 - 因为Spring支持嵌套的占位符表示,所以配对的查找是这个方法核心要解决的 - 逻辑:遍历字符串buf,匹配遇到的占位符前缀和后缀,如果是配套的后缀,则返回索引。 - 因为有嵌套占位符的情况,需要一个临时的变量记录内嵌占位符的出现次数,通过成对匹配的计算(出现前缀加1,出现后缀减1),防止错误返回内嵌占位符的后缀索引。 - @param buf 配置字符串,比如:${foo:${defaultFoo}} - @param startIndex 占位符在 buf中的index,初始值 = buf.indexOf("${"); */ private int findPlaceholderEndIndex(CharSequence buf, int startIndex) { int index = startIndex + this.placeholderPrefix.length(); // 嵌套的占位符出现次数标识变量,出现前缀加1,出现后缀减1。 int withinNestedPlaceholder = 0; while (index < buf.length()) { // 检测后缀,两种情况 if (StringUtils.substringMatch(buf, index, this.placeholderSuffix)) { // 1. 该后缀属于内嵌占位符,继续遍历 if (withinNestedPlaceholder > 0) { withinNestedPlaceholder--; index = index + this.placeholderSuffix.length(); } // 2. 目标占位符的后缀 else { return index; } } // 检测前缀,证明遇到的了内嵌占位符 else if (StringUtils.substringMatch(buf, index, this.simplePrefix)) { withinNestedPlaceholder++; index = index + this.simplePrefix.length(); } else { index++; } } return -1; } ``` ```java /** * Test whether the given string matches the given substring * at the given index. * 思路:以被查询的字符串,循环匹配每个字符,遇到不符合直接返回不匹配。 * 匹配查找和数据库的join 查询,小表驱动大表有异曲同工之处 * @param str the original string (or StringBuilder) * @param index the index in the original string to start matching against * @param substring the substring to match at the given index */ public static boolean substringMatch(CharSequence str, int index, CharSequence substring) { // 遍历 toFind 字符串 for (int j = 0; j < substring.length(); j++) { int i = index + j; // 如果原字符串不包含(长度不够)或者字符不匹配,立即失败 if (i >= str.length() || str.charAt(i) != substring.charAt(j)) { return false; } } return true; } ```
原创文章,需联系作者,授权转载
上一篇:Being Agile!敏捷团队的DoD
下一篇:Being Agile!Why Agile?
相关文章
Taro小程序跨端开发入门实战
Flutter For Web实践
配运基础数据缓存瘦身实践
京东物流质控队
文章数
7
阅读量
22477
作者其他文章
01
Insight Mybatis JdbcTemplate 混合事务控制的实现
spring容器中mybatis和jdbcTemplate混合事务控制
01
Insight Spring Test 事务自动回滚的实现
了解Spring Test 事务控制的原理
01
Insight Mybatis 日志打印及使用建议
mybatis 利用动态代理实现日志原理分析
01
Insight Spring中的算法-占位符查找
spring框架中的字符串算法
京东物流质控队
文章数
7
阅读量
22477
作者其他文章
01
Insight Mybatis JdbcTemplate 混合事务控制的实现
01
Insight Spring Test 事务自动回滚的实现
01
Insight Mybatis 日志打印及使用建议
添加企业微信
获取1V1专业服务
扫码关注
京东云开发者公众号