我得到了一个格式如下的字符串:yyyyMMdd_HHm_ss_unitCode_(status)。我需要将每个组件映射到一个专用类的属性。
我想用这样的正则表达式来定义我的令牌:{d+}4{d+}2{d+}2_{d+}2_{d+}2_{s+}3_{s+}2
=>对正则表达式的近似语法表示歉意,d表示十进制,s表示字符串。
我如何告诉我的解析器,第一个组{d+}4
必须位于类的"year"属性中,第二个必须位于"month"属性中等等。
显然,我可以这样做:token.setYear(substring(0,4))
,但我想更通用一点,因为我无法控制文件名的结构。我还考虑用startPosition、endPosition、要存储的属性名称和类型定义一个xml结构。
总而言之,我觉得这一切太复杂了。问题是我没有一个单独的分隔符来使用String.split
。
String input; // yyyyMMdd_HHmm_ss_unitCode_(status)
SpecialClass output;
String regex = "(\d{4})(\d{2})(\d{2})_(\d{2})(\d{2})_(\d{2})_([^_]+)_\((.+)\)";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(input);
if (m.matches())
{
output.year = m.group(1);
output.month = m.group(2);
// etc
}
示例输入:
String input = "20120113_1234_27_500_(33)";
将产生以下组:
Group 1: 2012 //year
Group 2: 01 //month
Group 3: 13 //day
Group 4: 12 //hour
Group 5: 34 //minute
Group 6: 27 //second
Group 7: 500 //unitcode
Group 8: 33 //status
测试程序:http://pastebin.com/upC5R9rP