项目实战:RequestUrl的处理(思考 + Sting API > KMP等复杂算法、正则表达式)
来源:互联网 发布:android直播rtmp源码 编辑:程序博客网 时间:2024/06/07 08:50
今天从项目中抽取了一个点进行分析,大概情形就是在项目中我们请求了大量参数,想非常直观的从这些参数中挑出一些特定信息并将它显示出来,这就涉及到了字符串的处理。
例如给定这样一个requestUrl:
private static String requestUrl = "http://xxxtest.11111111.com:9988" + "/resource/x/xxx/xxxsupport/xxxOrder/list" + "?q=zzz2VeREWb2S-tVPSvHugtM8l5ZQrypAJ6m0K0ezEIM%3D&cid=111330&uid=zzz522aa-8755-4a29-b984";我只想看到其中的接口信息:
/resource/x/xxx/xxxsupport/xxxOrder/list
这样一个小Feature。
观察目标字符串后,立刻判断,先通过:拆分requestUrl得到
http
//xxxtest.11111111.com
9988/resource/x/xxx/xxxsupport/xxxOrder/list?q=zzz2VeREWb2S-tVPSvHugtM8l5ZQrypAJ6m0K0···
在通过?拆分requestUrl[2]得到:
9988/resource/x/xxx/xxxsupport/xxxOrder/list
q=zzz2VeREWb2S-tVPSvHugtM8l5ZQrypAJ6m0K0ezEIM%3D···
最后摘取字符串requestUrl[2][0]即可:
/resource/x/xxx/xxxsupport/xxxOrder/list
源代码如下:
String[] Array1 = requestUrl.split(":");for(String temp : Array1){System.out.println(temp);}String[] Array2 = Array1[2].split("\\?");for(String temp : Array2){System.out.println(temp);}System.out.println(Array2[0].substring(4));
测试无误,简单的case,搞定。
然而我还是太天真,我在测试环境下跑通了case,过了一天,项目切到了预生产环境,RequestUrl变成了这个东西:
private static String requestUrl_new = "http://xxxtest.11111111.com" + "/resource/x/xxx/xxxsupport/xxxOrder/list" + "?q=zzz2VeREWb2S-tVPSvHugtM8l5ZQrypAJ6m0K0ezEIM%3D&cid=1113";
所以最后运行的结果变成了:
http
//xxxtest.11111111.com/resource/x/xxx/xxxsupport/xxxOrder/list?q=zzz2VeREWb2S-
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
at com.car.quan.String.RequestUrlStringTest.main(RequestUrlStringTest.java:28)
因为之前的requestUrl[2]没了导致数组越界异常,崩。
平复下心情,分析字符串,寻找新思路:
找出requestUrl的通用特征。
先通过?拆分requestUrl得到:
http://xxxtest.11111111.com/resource/x/xxx/xxxsupport/xxxOrder/list
q=zzz2VeREWb2S-tVPSvHugtM8l5ZQrypAJ6m0K0ezEIM%3D&cid=111
然后我们在requestUrl[0]中找到通用特征/resource,随后摘取字符串即可。
源代码和结果如下:
System.out.println(requestUrl_new.split("\\?")[0].substring(requestUrl_new.split("\\?")[0].indexOf("/resource")));
又验证将requestUrl切回到测试版本也是可行的。
综上,寻找到共性,熟悉Java API并将代码优化至一行。
勤于思考,并不用使用KMP等复杂算法或者正则表达式,仅用String的split、substring、indexof解决小case。
- 项目实战:RequestUrl的处理(思考 + Sting API > KMP等复杂算法、正则表达式)
- KMP算法的思考
- 算法导论:关于时间复杂T(n)的表达式处理
- 正则表达式思考+的作用
- 正则表达式(1)——项目实战常用
- 正则表达式关于复杂用户名的验证
- 简单又复杂的正则表达式RegExp
- 【正则】构造复杂SQL语句的正则表达式3(细粒度正则匹配)
- 实战项目中的正则表达式运用
- 正则表达式的处理
- 复杂正则表达式一
- KMP算法思考
- 关于项目算法的思考(二)
- Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(十二)打包项目图片等资源的处理
- 【正则】构造复杂SQL语句的正则表达式2(粗粒度分析)
- 【正则】构造复杂SQL语句的正则表达式1
- 字符串匹配的几种算法总结(KMP、等)
- 实用的JS正则表达式 (正数正则、IP正则、邮编正则等)
- HackerRank Find first repeating letter in a string
- oracle复制表数据,复制表结构
- JSON和GSON
- mysql:innodb锁与死锁
- ApiCloud的云api探究之旅
- 项目实战:RequestUrl的处理(思考 + Sting API > KMP等复杂算法、正则表达式)
- android studio详细教程汇总
- Android经常用到的设计模式
- gdb常用命令
- 学前端,自学好还是培训好?
- 好用的 CURL 类
- android服务已经启动却判断不出服务是否已经存在
- iOS 10 的适配问题
- 用Javascript判断图片是否存在,不存在则显示默认图片