2012-07-11 133 views
0

我有以下用例并寻找正确的解决方案。寻找解决方案[Java,Regex?]

我们正在读取一个csv文件,并且从该文件中填充一个POJO.One列可映射到POJO中的多个字段。

如:

Class Test { 

private String field1; 
private String field2; 
private String field3; 
...... 
other fields 
--- 
getter methods 
..... 
setter methods 
} 

让我们说,从文件列XXXX的价值是123_TEST_34_THJ

的FIELD1值是123 FIELD2值是34 filed3值THJ

我能做到这一点在Java代码中,但我正在寻找一种解决方案来动态分割它。我们假设XXXX的值现在更改为124_34_THJ,我希望我的代码能够在配置更改时正常工作。什么会是更好的解决方案?如果问题不明确,请让我知道。

+0

所以你想在'_'处分割'XXXX',然后过滤'TEST'? – Keppil 2012-07-11 05:26:53

+1

问题不明确 - 将值映射到对象的可能规则是什么? – RonK 2012-07-11 05:29:40

+1

制作一些[*太可配置的*](http://thedailywtf.com/Articles/The-Enterprise-User-Agent.aspx)可能几乎与不可配置的一样糟糕。除非这个*需要*表示灵活性,否则只需将代码(可以说是业务逻辑)写入实际程序的一部分即可。 (记住分离关注点和良好编码实践的基本规则。) – 2012-07-11 05:30:08

回答

1

你可以使用正则表达式使用命名捕获:

(?<field1>\d+)_\w+_(?<field2>\d+)_(?<field3>\w+) 

然后下周它可能是......

(?<field2>\d+)_(?<field7>\w+)_(?<field1>\d+)_(?<field3>\w+) 

你的选择对正则表达式库的更多信息与Regex Named Groups in Java命名捕获

+0

注意:命名组只支持java 7 – Bohemian 2012-07-11 07:09:07

+0

是的,这是在链接中指出的,以及早期版本的Java的库。 – Hounshell 2012-07-11 07:30:16