我有一个字符串
String user_name = "id=123 user=aron name=aron app=application";
Run Code Online (Sandbox Code Playgroud)
我有一个包含以下内容的列表:{user,cuser,suser}
我必须从字符串中获取用户部分.所以我有这样的代码
List<String> userName = Config.getConfig().getList(Configuration.ATT_CEF_USER_NAME);
String result = null;
for (String param: user_name .split("\\s", 0)){
for(String user: userName ){
String userParam = user.concat("=.*");
if (param.matches(userParam )) {
result = param.split("=")[1];
}
}
}
Run Code Online (Sandbox Code Playgroud)
但问题是,如果String中包含空格,则user_name不起作用.例如:
String user_name = "id=123 user=aron nicols name=aron app=application";
Run Code Online (Sandbox Code Playgroud)
这里user有一个aron nicols包含空格的值.我怎样才能编写一个可以让我获得确切user价值的代码,即aron nicols
如果你只想在之后的权利之前的空格上拆分=,user=...那么可能会添加前瞻性条件,如
split("\\s(?=\\S*=)")
Run Code Online (Sandbox Code Playgroud)
这个正则表达式将分裂
\\s 空间 (?=\\S*=)其中有零个或多个*非空格\\S字符,=以其后结尾.前瞻(?=...)也是零长度匹配,这意味着它匹配的部分将不会包含在结果中,因此拆分不会在其上拆分.演示:
String user_name = "id=123 user=aron nicols name=aron app=application";
for (String s : user_name.split("\\s(?=\\S*=)"))
System.out.println(s);
Run Code Online (Sandbox Code Playgroud)
输出:
id=123
user=aron nicols
name=aron
app=application
Run Code Online (Sandbox Code Playgroud)
从你在其他答案中的评论来看,似乎=逃脱的\不应被视为分隔符之间的分隔符,key=value而是作为值的一部分.在这种情况下,你可以添加负面观察机制,以查看之前=是否是\,所以(?<!\\\\)就在之前需要=没有\它.
BTW创建正则表达式,\我们需要将它写成匹配\\但是在Java中我们还需要转义每个\以\在String中创建文字,这就是我们最终的结果\\\\.
所以你可以使用
split("\\s(?=\\S*(?<!\\\\)=)")
Run Code Online (Sandbox Code Playgroud)
演示:
String user_name = "user=Dist\\=Name1, xyz src=activedirectorydomain ip=10.1.77.24";
for (String s : user_name.split("\\s(?=\\S*(?<!\\\\)=)"))
System.out.println(s);
Run Code Online (Sandbox Code Playgroud)
输出:
user=Dist\=Name1, xyz
src=activedirectorydomain
ip=10.1.77.24
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
131 次 |
| 最近记录: |