Java 替换前两次出现的'&';查尔斯

Java 替换前两次出现的'&';查尔斯,java,regex,string,replace,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.pr

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

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=2gb4gb&asd=sdsd&
我的输出-
&axy=asdsd&ram=8gb&

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

只想换中间部分


我正在做一个搜索过滤器。如果存在任何用于构建查询的API,我很想知道。

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

类似这样的东西(未测试)

谢谢波波

这起作用了…?'而不是“.”

公共类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&

您需要使用一个求反字符类
[^&]
来匹配除
&
之外的任何字符和一个
*
量词(零次或多次出现),并利用
字符串#replaceFirst()
方法仅执行一次替换:

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);
    }
}
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&

请参见

尝试改用*使用。利用
replaceFirst
仅执行一个S&R操作。
replaceAll
将在其他字符串中匹配并替换比您需要的更多的字符串,其中包含更多的
&
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&