在前两次'&'之间替换字符串字符

时间:2016-02-06 16:48:52

标签: java regex string replace

如何仅在第一个&和下一个&之间替换字符串:

public class Test02 {


public static void main(String[] args) {
    String xyz = "&axy=asdsd&ram=2 gb4 gb&asd=sdsd&";

    String x =  xyz.replaceAll("&ram=.*&", "&ram=8 gb&");

    System.out.println(x);
    }
}

我的输入 - &axy=asdsd&ram=2 gb4 gb&asd=sdsd& 我的输出 - &axy=asdsd&ram=8 gb&

但我想 - &axy=asdsd&ram=8 gb&asd=sdsd&

只想改变中间部分。

我正在制作搜索过滤器。如果存在用于构建查询的任何API,我很乐意知道。

4 个答案:

答案 0 :(得分:1)

谢谢你,

这有效......'。?'而不是'。'..

公共类Test02 {

public static void main(String[] args) {
    String xyz = "&axy=asdsd&ram=2 gb4 gb&asd=sdsd&";

    String x =  xyz.replaceAll("(&ram=.*?)&", "&ram=8 gb&");

    System.out.println(x);
}

}

现在输出 - & axy = asdsd& ram = 8 gb& asd = sdsd&

答案 1 :(得分:0)

您可以在String上使用split方法将其分解为具有给定分隔符的标记。然后用新的期望值替换你想要的任何索引。

像这样(未经测试)

String text = "A&B&C";
String delim = "&";
String[] elements = text.split(delim);
elements[0]= "D";
String result = "";
for (String token : elements) {
    result += token + delim;
}
System.out.println(result.substring(0, result.length() - delim.length())); // "D&B&C"

答案 2 :(得分:0)

public static void main(String[] args) {
    String xyz = "&axy=asdsd&ram=2 gb4 gb&asd=sdsd&";
    int firstAndPosition =xyz.indexOf('&',1);
    int secondAndPosition =xyz.indexOf('&',firstAndPosition+1);
    String stringToReplace = xyz.substring(firstAndPosition, secondAndPosition +1);

    //The do your stuff
    String x =  xyz.replaceAll(stringToReplace, "&ram=8 gb&");
    System.out.println(x);
    }
}

答案 3 :(得分:0)

您需要使用与任何字符匹配的否定字符类[^&],但&*量词(零次或多次出现)匹配,并仅使用String#replaceFirst()方法执行一次更换:

String xyz = "&axy=asdsd&ram=2 gb4 gb&asd=sdsd&";
String x =  xyz.replaceFirst("&ram=[^&]*&", "&ram=8 gb&");
System.out.println(x);
// => &axy=asdsd&ram=8 gb&asd=sdsd&

请参阅IDEONE demo