Java 替换长字符串中的模式。在循环中使用了replace方法,但每次都会替换第一次出现的方法
替换长字符串中的模式。在循环中使用了replace方法,但每次都会替换第一次出现的方法 例如,我想一个接一个地迭代和替换所有出现的情况Java 替换长字符串中的模式。在循环中使用了replace方法,但每次都会替换第一次出现的方法,java,Java,替换长字符串中的模式。在循环中使用了replace方法,但每次都会替换第一次出现的方法 例如,我想一个接一个地迭代和替换所有出现的情况 LongString.contains("/ima?pth=") LongString=LongString.replace("/ima?pth=", "/ima?pth=**1**"); 每次我必须在事件结束时添加一个新数字,它可以是任何值。如何在Java中做到这一点?根据它应该替换所有。。。否则你可以加入一个while循环。不过我要提醒一下,因为Long
LongString.contains("/ima?pth=")
LongString=LongString.replace("/ima?pth=", "/ima?pth=**1**");
每次我必须在事件结束时添加一个新数字,它可以是任何值。如何在Java中做到这一点?根据它应该替换所有。。。否则你可以加入一个while循环。不过我要提醒一下,因为LongString.contains(“/ima?pth=”)在被全部替换时仍然是正确的。很容易有一个无限循环 使用
Matcher
和Matcher#appendReplacement()
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ReplaceAllEx {
public static void main(String[] args) {
String input = "randomPrefix"
+ "/ima?pth=randomInfix/ima?pth="
+ "/ima?pth=randomInfix/ima?pth="
;
Pattern p = Pattern.compile("/ima\\?pth=");
Matcher m = p.matcher(input);
int i = 1;
StringBuffer sb = new StringBuffer();
System.out.println("input is\n" + input + "\n");
while (m.find()) {
m.appendReplacement(sb, "/ima?pth="+"**"+i+"**");
i++;
}
System.out.println("output is\n" + sb.toString() + "\n");
}
}
上述程序的输出为:
input is
randomPrefix/ima?pth=randomInfix/ima?pth=/ima?pth=randomInfix/ima?pth=
output is
randomPrefix/ima?pth=**1**randomInfix/ima?pth=**2**/ima?pth=**3**randomInfix/ima?pth=**4**
已更新
下面是另一个示例,演示了在OP的新输入示例中使用Matcher#appendReplacement()
private static void example2() {
String input = "<img src=\"cid:1\"/>"
private static void example2() {
String input = "<img src=\"cid:1\"/>"
// + "<span style=\"font-size:14pt;font-family:'Times New Roman';\">"
// + "</span><div>"
// + "<span style=\"font-size:14pt;font-family:'Times New Roman';\">"
// + "<br /></span></div>"
// + "<div>"
// + "<span style=\"font-size:14pt;font-family:'Times New Roman';\">"
// + "<br /></span></div>"
// + "<div>"
// + "<span style=\"font-size:14pt;font-family:'Times New Roman';\">"
// + "</span><br /><div style=\"display:none;\">"
// + "</div></div><div>"
// + "<span style=\"font-size:14pt;font-family:'Times New Roman';\">"
// + "<br /></span></div><div>"
+ "<img src=\"/XP/image?path=09021b5e80061f2c\"/>"
// + "<span style=\"font-size:14pt;font-family:'Times New Roman';\">"
// + "<br /></span>"
+ "<img src=\"/XP/image?path=09021b5e80061f2c\"/>"
+ "<img src=\"/XP/image?path=09021b5e80061f2c\"/>"
;
Pattern p = Pattern.compile("<img src=\\\"/XP/image\\?path=09021b5e80061f2c\\\"/>");
Matcher m = p.matcher(input);
int i = 2;
StringBuffer sb = new StringBuffer();
System.out.println("input is\n" + input + "\n");
while (m.find()) {
String replacement = String.format("<img src=\"cid: %d\"/>", i);
m.appendReplacement(sb, replacement);
i++;
}
System.out.println("output is\n" + sb.toString() + "\n");
}
private static void example2(){
字符串输入=“”
私有静态void示例2(){
字符串输入=“”
// + ""
// + ""
// + ""
//+“
”
// + ""
// + ""
//+“
”
// + ""
// + ""
//+“
”
// + ""
// + ""
//+“
”
+ ""
// + ""
//+“
”
+ ""
+ ""
;
Pattern p=Pattern.compile(“”);
匹配器m=p.Matcher(输入);
int i=2;
StringBuffer sb=新的StringBuffer();
System.out.println(“输入为\n”+输入+”\n”);
while(m.find()){
字符串替换=String.format(“,i);
m、 替换(sb,替换);
i++;
}
System.out.println(“输出为\n”+sb.toString()+”\n”);
}
这将是程序输出:
input is
<img src="cid:1"/><img src="/XP/image?path=09021b5e80061f2c"/><img src="/XP/image?path=09021b5e80061f2c"/><img src="/XP/image?path=09021b5e80061f2c"/>
output is
<img src="cid:1"/><img src="cid: 2"/><img src="cid: 3"/><img src="cid: 4"/>
输入不正确
输出为
您可以使用类似的:
您可以根据需要修改number
上的操作,但在本例中,它只增加1
试试它replaceAll(字符串正则表达式,字符串替换)
您应该已经介绍过了replace每次都会替换首次出现的内容吗我想重复字符串匹配模式,将其替换为“/ima?pth=**1**”字符串newBody=body.replace(“啊……我误解了这个问题。我会将您的“包含”更改为包含以下内容”
我可以用替换字符串的第一次出现,但我如何替换所有出现。用2、3、4等等…@Jimmy\R--在您上面的第一个评论中,似乎只有一次出现
。无论如何,如果您认为我的答案指向了正确的方向,请向上投票,并进行交流接受它。我可以看看我是否可以发布一个更新的答案来解决你的新例子。leeyuiwah-我做了。谢谢你的帮助,投票也通过了:):)
class Main {
public static void main(String[] args) {
String longString = "qwe/ima?pth=asdzxc/ima?pth=qweasd/ima?pth=sdf";
StringBuilder str = new StringBuilder(longString);
String pattern = "/ima?pth=";
int index = longString.indexOf(pattern);
int number = 1;
while(index >= 0) {
str.insert(index + pattern.length(), number);
index = str.indexOf("/ima?pth=", index+1);
number += 1;
}
longString = str.toString();
System.out.println(longString); //qwe/ima?pth=1asdzxc/ima?pth=2qweasd/ima?pth=3sdf
}
}