一段字符串,怎么按需求提取出信息。

qq_32165209 2016-05-23 05:33:18
例如下面两行日志字符串(相当于两个例子):
05-23 09:18:33.393: W/System.err(4237): org.json.JSONException: No value for pinkey

05-23 09:20:22.597: W/System.err(24859): com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter$UnknownFieldException: No such field com.newland.mobilepay.http.rsp.CancelRsp.OldSystrace

我想获取最前面的时间(比如05-23 09:18:33.393),W/System.err()里面的数字比如(24859),异常类型比如(org.json.JSONException),异常说明比如(No value for pinkey)

这些日志的关键字是 W/System.err ,Exception
请问函数方法应该怎么写才能获取到这些信息。
时间的获取方式比较简单,用substring(0, 14);方法就可以,因为长度和位置都是固定的。其它的因为情况不同长度和位置会有所差异。但是都有共性:那个数字一定存在于W/System.err()内,异常类型肯定带有Exception,异常说明肯定在Exception:后面。
...全文
159 6 打赏 收藏 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
tony4geek 2016-05-24
  • 打赏
  • 举报
回复
	List<String> items = new ArrayList<>();
		items.add("05-23 09:18:33.393: W/System.err(4237): org.json.JSONException: No value for pinkey");
		items.add("05-23 09:20:22.597: W/System.err(24859): com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter$UnknownFieldException: No such field com.newland.mobilepay.http.rsp.CancelRsp.OldSystrace");
		Pattern p = Pattern.compile("(.*?):\\s+W/System.err\\((\\d+)\\):(.*?)Exception:\\s+(.*)");
		
		for (String s : items) {
			Matcher m = p.matcher(s);
			if (m.find() ) {
				System.err.println(  m.group(1)+"===>"+m.group(2)+"===>"+m.group(3)+"Exception===>"+m.group(4));
			}
		}
		
微笑着生活 2016-05-24
  • 打赏
  • 举报
回复
复杂的解决就是正则。简单点的解决indexOf取”W/System.err(“定位,然后根据这个位置去截取后面得数字字符串。不管在哪里都能找到。比较笨的方法就这样
qq_32165209 2016-05-24
  • 打赏
  • 举报
回复
顶一下,有人帮忙看看,写个范例啥的么
qq_32165209 2016-05-24
  • 打赏
  • 举报
回复
谢谢4楼,5楼。学习了
qq_32165209 2016-05-23
  • 打赏
  • 举报
回复
额,不好实现吧。
lshhjxlj 2016-05-23
  • 打赏
  • 举报
回复
正则表达式就是为你这种问题准备的

51,407

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧