【问题标题】:Java String Replace on an XML patternXML 模式上的 Java 字符串替换
【发布时间】:2019-12-29 02:44:51
【问题描述】:

我有以下 XML 字符串:

String XML = "<TEST><MESSAGEID>5435646578</MESSAGEID></TEST>";

xml字符串中的数字一直在变化,所以我想做一个字符串替换,想把xml变成

<TEST><MESSAGEID></MESSAGEID></TEST>

我正在寻找做这样的事情,但我不确定如何获取 replaceAll 方法中第一个参数的模式。

public class HelloWorld {

    public static void main(String[] args) {
        String XML = "<MESSAGEID>5435646578</MESSAGEID>";
        String newStr = XML.replaceAll("<MESSAGEID>*</MESSAGEID>", "<MESSAGEID></MESSAGEID>");
        System.out.println(newStr);
    }
}

【问题讨论】:

  • 尝试将uotmXML.replaceAll("&lt;MESSAGEID&gt;*&lt;/MESSAGEID&gt;" 中的* 替换为[^&lt;]+。这将匹配所有内容,直到 &lt; 字符
  • 这对我有用。如果您想将其添加为答案而不是评论,我会接受此答案。

标签: java regex string replace replaceall


【解决方案1】:

模式&lt;MESSAGEID&gt;[0-9]+&lt;/MESSAGEID&gt; 可以工作。如果您的输入结构可以改变,您可能需要使用 XML 解析器。

【讨论】:

    【解决方案2】:

    除非您绝对确定它只是数字,否则我会使用字母数字模式:

    // alphanumeric
    String newStr = uotmXML.replaceAll("<MESSAGEID>\w+</MESSAGEID>", "<MESSAGEID></MESSAGEID>");
    
    // digits
    String newStr = uotmXML.replaceAll("<MESSAGEID>\d+</MESSAGEID>", "<MESSAGEID></MESSAGEID>");
    
    

    【讨论】:

      【解决方案3】:

      如果您保证格式不会改变,我会使用正则表达式 ^&lt;MESSAGEID&gt;(\d+)&lt;/MESSAGEID&gt;$ 来查找数字(在第 1 组中)。否则我会使用合适的 XML 库,比如 JAXB 或 Jackson。

      【讨论】:

        【解决方案4】:

        尝试将uotmXML.replaceAll("&lt;MESSAGEID&gt;*&lt;/MESSAGEID&gt;", ... 中的* 替换为[^&lt;]+。这将匹配直到 &lt; 字符之前的所有内容

        【讨论】:

          猜你喜欢
          • 2016-06-23
          • 2018-12-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多