2012-07-11 142 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