2017-02-13 137 views
1

我用'&'拆分字符串。例如:将字符串拆分为键值对

password=XXXXXXXXX&username=XXXXXXXXXXX 

现在,如果假设我的密码包含“&”,那么我在这里所面临的问题是,密码大干快上的“&”第一次出现trimed。

例子:

password=disney&123&username=XXXXXXXXXXX 

所以我的输出将是如下:

password=disney 
123 
username=XXXXXXXXXXX 

但我想我的输出为:

password=disney&123 
username=XXXXXXXXXXX 

请指引我,因为我是新来的java的。 而我想分开只使用'&'字符串,我的密码可能conatin'&'它取决于用户。

由于事先 仅限Ritesh

+0

'的indexOf( “&用户名”)的字符串; ' –

+0

你应该单独阅读那些...... –

+0

你需要编码或转义特殊字符。请参阅[网址编码](https://en.wikipedia.org/wiki/Query_string#URL_encoding)。 – shmosel

回答

1
String[] strs="password=disney&123&username=XXXXXXXXXXX".split("&username="); 
strs[1]="username="+strs[1]; 
System.out.println(strs[0]); 
System.out.println(strs[1]); 

-

编辑:

//This is a slightly more generalized method 
String[] strs="username=XXXXXXXXXXX&password=disney&123".split("&(?=(username|password)=)"); 
System.out.println(strs[0]); 
System.out.println(strs[1]); 

-

编辑:

//more generalized method 
String[] strs="username=XXXXXXXXXXX&password=disney&123".split("&(?=([a-zA-Z0-9]+)=)"); 
for(String str : strs) 
    System.out.println(str); 
+0

但是如果它收到的字符串被格式化为“username = XXX $ password = YYY”?根据OP的建议,听起来它应该也是一个可解析的价值。 – MikaelF

+0

@MikaelF OP的例子不是URL编码('password'包含非转义字面'&')。对于自定义格式,我们需要自定义分析器。无论如何,我会添加一个稍微更通用的方法。 – cshu

+0

感谢您的帮助。但是这个用户名和密码是url中查询字符串的一部分。长度即用于查询的参数数量可能会发生变化,例如: –

2

更简单的解决方案是完全使用URL编码。这里你只使用分隔符系统,但你也应该使用编码。所以,当你建立字符串,编码值,这将取代一些字符,你可以使用complet solution或简单地用您选择的值替换&(但我不会这样做)。

然后,当您拆分字符串时只包含用于分隔值的&,请解码值(重新创建原始值)。

这与将请求发送到WebService完全相同,因为您使用相同的模式,这似乎更多的逻辑。

  • 编码值
  • 的毗连的值与&
  • 发送字符串
  • 拆分使用&
  • 解码值
+0

感谢您的建议和及时的回复 –

+0

@RiteshKhatri如果您不知道您将收到的参数的名称,这是一个更通用的解决方案。 – AxelH