过滤String得到想要的信息

gycool21 2017-02-11 11:58:16
String out = "名称:aaa---------------本地ip:2.5.6.1 远程ip:2.3.4.5,4.5.6.9 远程端口:22" +
" 名称:ddd---------------本地ip:2.2.2.1,远程端口:33,45 " +
"名称:eee---------------本地ip:2.5.6.1 远程ip:2.3.4.5,4.5.6.9 ";
类似如上字符串,每条信息都有“名称”,可能有“远程ip”、“远程端口”。如何过滤得到这三个字段的信息,如果某个字段没有则填空。即输出String[] filterOut;filteOut[0]=aaa filterOut[1]=2.5.6.1 filterOut[2]=22 filterOut[3]=ddd filterOut[4]=null filterOut[5]=33,45 filterOut[6]=eee filterOut[7]=2.3.4.5,4.5.6.9 filterOut[8]=null
...全文
201 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
字符串的格式你得说清楚。 比如, 1、名称是由哪些字符构成的,可不可以为中文 2、每条信息的格式都一样吗?本地ip后面有些是空格,而有些却是逗号 3、中文字符后面的冒号是英文状态下的还是中文状态下的,还是都可以 ......等等都得说清楚
  • 打赏
  • 举报
回复
结果如下图:
  • 打赏
  • 举报
回复


		String regex="名称:(\\w+)[-]+本地ip:[\\d\\.]+(?:[,\\s]+远程ip:([\\d\\.,]+))?(?:[\\s,]+远程端口:([\\d,]+))?";
		String out = "名称:aaa---------------本地ip:2.5.6.1  远程ip:2.3.4.5,4.5.6.9   远程端口:22" +
				" 名称:ddd---------------本地ip:2.2.2.1,远程端口:33,45       " +
				"名称:eee---------------本地ip:2.5.6.1  远程ip:2.3.4.5,4.5.6.9  ";
		Matcher m=Pattern.compile(regex).matcher(out);
		StringBuilder result=new StringBuilder();
		while(m.find()){
			result.append(m.group(1)).append("#").append(m.group(2)).append("#").append(m.group(3)).append("#");
		}
		String[] filterOut=result.toString().split("#");
		int len=filterOut.length;
		for(int i=0;i<len;i++){
			System.out.println("filteOut["+i+"]="+filterOut[i]);
		}
	

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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