LogParserTest不通过

来源:6-11 省份浏览量统计之日志解析

weixin_慕瓜0383873

2020-04-21

从vi中复制出来的值还是^A,不是/001

        String log = "20947290187^Ahttp://www.yihaodian.com/ctg/s2/c5287-%E5%A4%A7%E7%B1%B3/b/a28186,28184-s1-v0-p1-price-d0-f0-m1-rt0-pid-k/1/^Ahttp://www.yihaodian.com/ctg/s2/c5287-%E5%A4%A7%E7%B1%B3/b1879/a28186^A^A2^ASKAPHD3JZYH9EE9ACB1NGA9VDQHNJMX1NY9T^A^A^A^A^APPG4SWG71358HGRJGQHQQBXY9GF96CVU^A2225501^A1^A124.79.172.232^A^Amsessionid:YR9H5YU7RZ8Y94EBJNZ2P5W8DT37Q9JH,uname:chen45311,unionKey:2225501^A^A2013-07-21 09:32:30^A134885852^Ahttp://www.baidu.com/s?wd=1%E5%8F%B7%E5%BA%97&rsv_bp=0&ch=&tn=baidu&bar=&rsv_spt=3&ie=utf-8&rsv_sug3=5&rsv_sug=0&rsv_sug1=4&rsv_sug4=313&inputT=4235^A11^A0^A\\N^A1^A-10^A^A^A^A^AMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; MATP; Media Center PC 6.0; .NET4.0C; InfoPath.2; .NET4.0E)^AWin32^A^A 93 ^A1^A^Asearch_order_2^A上海市^A1^Anull^A^A上海市^A^A66^A^A^A^A^A\\N^A\\N^A\\N^A\\N^A2013-07-21\n";

错误信息为:

java.lang.ArrayIndexOutOfBoundsException: 13

尝试在LogParser中修改

String[] splits = log.split("^A");

还是报错的,错误信息为

java.lang.ArrayIndexOutOfBoundsException: 13
写回答

2回答

慕粉2156561567

2021-03-11

你直接写死IP是第13位的做法本来就是错误的,在实际工作中不可能这样写,就算没出问题也是凑巧而已。老师的做法只是个例,我自己在编写这部分代码的时候就是自己对字符串进行分割之后逐个去校验是否是IP,直接写死下标是极其不负责任的做法

0
1
Michael_PK
这么做不好的 生产上的日志,第几位是什么字段都是固定的,但是也会有脏数据, 最佳实践是:首先按照指定分隔符拆分后,先判断字段个数是否对,如果对在进行解析,不对就是属于脏数据了
2021-03-11
共1条回复

Michael_PK

2020-04-21

^A的默认值就是\001,你是直接copy内容到idea了吧?  idea有肉眼看不到的分隔符,建议你拷贝到sublime之后,然后整个文件放到指定的目录下,别拷贝内容到idea中


0
0

Hadoop 系统入门+核心精讲

从Hadoop核心技术入手,掌握数据处理中ETL应用,轻松进军大数据

2397 学习 · 902 问题

查看课程