2016-02-17 24 views
0

我试图解析以下格式的字符串中的Java:解析字符串输入的自由文本

Number-Action-Msg, Number-Action-Msg, Number-Action-Msg, Number-Action-Msg, ... 

例如

"512-WARN-Cannot update the name.,615-PREVENT-The app is currently down, please try again later.,736-PREVENT-Testing," 

我想获得与数组以下条目:

512-WARN-Cannot update the name. 
615-PREVENT-The app is currently down, please try again later. 
736-PREVENT-Testing 

问题是,该消息是用户输入,所以我不能依靠只是逗号来分裂你字符串。这些行为将始终是WARN或PREVENT。什么是完成这个解析的最好方法?谢谢!

+1

@pczeus as told me .... *我不能只依赖逗号来分割字符串*所以......用逗号分隔...... :) –

回答

3

而不是分裂的逗号,你可以使用这个前瞻基于正则表达式匹配:

(\d+-(?:WARN|PREVENT).*?)(?=,\d+-(?:WARN|PREVENT)|,$) 

RegEx Demo

(?=,\d+-(?:WARN|PREVENT)|,$)是一个肯定的前瞻,断言有一个逗号,然后是digits-(WARN|PREVENT)或行末。

+1

sweeeeeet ...远处更多比我的优雅;) –

3

似乎相当简单:

正则表达式:

WARN|PREVENT 

Regular expression visualization

Debuggex Demo

在java中:

String string = "512-WARN-Cannot update the name.,615-PREVENT-The app is currently down, please try again later.,736-PREVENT-Testing,"; 
String regex = "WARN|PREVENT"; 

System.out.println(Arrays.toString(string.split(regex))); 

将输出:

[512-, -Cannot update the name.,615-, -The app is currently down, please try again later.,736-, -Testing,] 

当然,你可能需要调整正则表达式添加-,例如:

String regex = "-WARN-|-PREVENT-";