2014-04-11 35 views
1

之間更換子,我有以下XML片段作爲一個字符串:爪哇 - 找到兩個模式字符串

String str ="<xs:user>userName</xs:user><xs:password>userPassword</xs:password> 
<xs:address>addressString</xs:address>"; 

什麼是與XXXXXXX更換的userPassword的最好方法?

編輯:xs(namespace)可以變化。

+1

邊界/特例:如果密碼包含<? –

回答

1

嘗試使用這樣的:

String str2 = str.replaceFirst("<xs:password>.*?</xs:password>", "<xs:password>xxxxxxxxxx</xs:password>");` 
+0

我不會在這裏使用貪婪的'。*',而是用'。*?'替換它。 – Joffrey

+0

是的,這是很好的建議..編輯.. – anirudh

1

這應該這樣做。這是我現在可以想到的最簡單的解決方案。

public static void main(String[] args) { 
    String str = "aaaaa<xs:password>userPassword</xs:password>bbbbbbbbbb"; 
    String newPassword = "test"; 
    String s2 = str.replaceAll("<xs:password>[^<]*</xs:password>", "<xs:password>" + newPassword + "</xs:password>"); 
    System.out.println(s2); 
} 
+0

我寧願@anirudh版本,因爲你的排除嵌套標籤,所以不能一般化,即使它在這裏做這項工作。 – Joffrey

+0

+1對於工作解決方案,雖然。 – Joffrey

0

的老校友爬網直通串計算策略是:

String in = 
      "<xs:user>userName</xs:user>" + 
      "<xs:password>userPassword</xs:password>" + 
      "<xs:address>addressString</xs:address>"; 

    int pwStart = in.indexOf("<xs:password>") + 13; 
    int pwLen = in.indexOf("</xs:password>") - pwStart; 

    StringBuilder out = new StringBuilder(); 

    out.append(in.substring(0, in.indexOf("<xs:password>") + 13)); 
    for (int i = 0; i < pwLen; i++) { 
     out.append("x"); 
    } 
    out.append(in.substring(in.indexOf("</xs:password>"))); 

    System.out.printf("%s\n", in); 
    System.out.printf("%s\n", out); 
0

在Java:

public static void replace(){ 

    String str = 
      "<xs:user>userName</xs:user>" + 
      "<xs:password>userPassword</xs:password>" + 
      "<xs:address>addressString</xs:address>"; 

    String[] s = str.split("><"); 

    String[] t = s[1].split("password>"); 

    String[] a = t[1].split("</xs:"); 

    System.out.println(a[0]); 

    String newS = s[0] + "><" + t[0] + "password>" + "YOUR XXXXXXX GOES HERE" + "</xs:" + a[1] + "><" + s[2]; 

    System.out.println(newS); 

} 

希望這有助於。