2017-02-13 175 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