Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 替换长字符串中的模式。在循环中使用了replace方法,但每次都会替换第一次出现的方法_Java - Fatal编程技术网

Java 替换长字符串中的模式。在循环中使用了replace方法,但每次都会替换第一次出现的方法

Java 替换长字符串中的模式。在循环中使用了replace方法,但每次都会替换第一次出现的方法,java,Java,替换长字符串中的模式。在循环中使用了replace方法,但每次都会替换第一次出现的方法 例如,我想一个接一个地迭代和替换所有出现的情况 LongString.contains("/ima?pth=") LongString=LongString.replace("/ima?pth=", "/ima?pth=**1**"); 每次我必须在事件结束时添加一个新数字,它可以是任何值。如何在Java中做到这一点?根据它应该替换所有。。。否则你可以加入一个while循环。不过我要提醒一下,因为Long

替换长字符串中的模式。在循环中使用了replace方法,但每次都会替换第一次出现的方法

例如,我想一个接一个地迭代和替换所有出现的情况

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
  }
}