正则表达式的应用,现有一个webservice接口,第三方调用此ws接口发送一条类型为string 内容为“(见附件的log.txt日志文档每条单独的内容记录)”的String对象。
内容的格式是由 工号 增/删/改 服务器号 通道 预定的播出时间 上传的文件夹名 应播出时长 实际上传时长
如:1018 增 143-CRC-LB6A-9 1215 03:00:15;1215 05:00:15;1215 17:00:15;1215 19:00:15;1215 20:00:15 3FRA21N 9'40" 9'41"
工号 : 1018
增/删/改 增
录播服务器号 143-CRC-LB6A-3中的6 为服务器号
播出通道 143-CRC-LB6A-9中的9 为通道
预定的播出时间 1215 03:00:15;1215 05:00:15;1215 17:00:15;1215 19:00:15;1215 20:00:15 表示12月15日的03:00:15播出、12月15日 的02:00:15 播出.... 下略
上传的文件夹名 3FRA21N
应播出时长 9'40"
实际上传时长 9'41"
要求:1书写一个javaBean类,用正则表达式匹配并分解出 工号 (增/删/改) 服务器号 通道 预定的播出时间 上传的文件夹名 应播出时长 实际上传时长
以及 校验应播出时长 和 实际上传时长 时间误差大于5s 则校验失败,否则校验成功。一共9个属性赋予该java Bena 对象。
2、请尽量使用一条正则匹配所有属性。
3、代码简洁、工整。
测试要求:在main方法中改变消息的内容 如: String str = “1018 增 145-CRC-LB6A-5 1215 02:00:15 3FRA4N 4'40" 4'40"”;
运行结果为解析的变量值结果。
我是新人,谢谢大家
服务器号:strs[2].charAt(strs[2].length() - 4)
通道:strs[2].charAt(strs[2].length() - 1)
[quote]以及 校验应播出时长 和 实际上传时长 时间误差大于5s 则校验失败,否则校验成功。[/quote]
根据个人经验,这个用正则表达式做不了
校验代码:
[code="java"]
// 根据时间根据创建格式化时间对象
DateFormat df = new SimpleDateFormat("MMdd HH:mm:ss");
try {
Date date1 = df.parse("1215 03:00:00");
Date date2 = df.parse("1215 05:00:00");
Date date3 = df.parse("1215 03:00:00");
Date date4 = df.parse("1215 05:00:06");
long time1 = date2.getTime() - date1.getTime(); // 应播出时长
long time2 = date4.getTime() - date3.getTime(); // 实际上传时长
if (Math.abs(time2 - time1) > 5000) {
System.out.println(" 时间误差大于5s, 校验失败");
}
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
[/code]
如果你的每一行都是以空格为分隔符,那么可以直接用String的split方法分割:
[code="java"]
String str = "1018 增 145-CRC-LB6A-5 1215 02:00:15 3FRA4N 4'40 4'40";
String[] strs = str.split(" ");
[/code]
或者用org.apache.commons.lang.StringUtils的split、splitByWholeSeparator、splitPreserveAllTokens等方法
[code="java"]
String[] strs = StringUtils.split(str);
[/code]
然后对145-CRC-LB6A-5拆出服务器号、通道,个人觉得没必要用正则表达式
正则表达式能简化操作,也能把程序搞复杂,能简单处理的话就没必要用正则表达式
正则表达式,在必要的时候才用,一般是在用其他方式比较难处理、用正则表达式可以方便处理的情况下
以上均为个人理解