java-在两个模式字符串之间查找和替换子字符串

java-在两个模式字符串之间查找和替换子字符串,java,Java,我将以下xml片段作为字符串: String str ="<xs:user>userName</xs:user><xs:password>userPassword</xs:password> <xs:address>addressString</xs:address>"; String str=“usernameurspassword” 地址字符串”; 用xxxxxxx替换userPassword的最佳方法是什么 编辑:

我将以下xml片段作为字符串:

String str ="<xs:user>userName</xs:user><xs:password>userPassword</xs:password>
<xs:address>addressString</xs:address>";
String str=“usernameurspassword”
地址字符串”;
用xxxxxxx替换userPassword的最佳方法是什么

编辑:xs(名称空间)可以不同

尝试使用以下方法:

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

这应该可以。这是我现在能想到的最简单的解决方案

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);
}
publicstaticvoidmain(字符串[]args){
String str=“aaaaa userpasswordbbbbbbbb”;
字符串newPassword=“test”;

String s2=str.replaceAll(“[^通过字符串方法的老式爬网将是:

    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);
输入字符串=
“用户名”+
“用户密码”+
“地址字符串”;
int pwStart=in.indexOf(“”+13;
int pwLen=in.indexOf(“”)-pwStart;
StringBuilder out=新的StringBuilder();
out.append(in.substring(0,in.indexOf(“”+13));
对于(int i=0;i
在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);

}
publicstaticvoidreplace(){
字符串str=
“用户名”+
“用户密码”+
“地址字符串”;
字符串[]s=str.split(“>”);

字符串[]a=t[1]。拆分(“+”您的XXXXXXX位于此处“+”我不会在这里使用贪婪的
*
,而是用
*?
替换它。这是一个很好的建议..编辑..一个边界/特例:如果密码包含<-我更喜欢@anirudh版本,因为你的版本不包括嵌套的标记,所以不能通用化,即使它在这里做工作。+1不过,解决方案。