2

我得到了一个格式如下的字符串:yyyyMMdd_HHmm_ss_unitCode_(status)。我需要将每个组件映射到专用类的属性。

我想用这样的正则表达式来定义我的标记: {d+}4{d+}2{d+}2_{d+}2_{d+}2_{s+}3_{s+}2=> Apologize 为近似的正则表达式语法,d 代表十进制,s 代表字符串。

我如何告诉我的解析器第一组{d+}4必须进入我班级的“年”属性,第二组必须进入“月”,依此类推。

显然,我可以这样做:token.setYear(substring(0,4))但我想更通用一点,因为我无法控制文件名的结构。我还考虑过定义一个带有 startPosition、endPosition、要存储和键入的属性名称的 xml 结构。

总而言之,我觉得这一切都太复杂了。问题是我没有一个分隔符来使我能够使用String.split.

4

1 回答 1

0
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

于 2012-01-12T17:28:22.913 回答