我将XML解析为字符串..基本结构如下所示
<envelope>
<body>
<entity1>
<tag1>
.
.
</tag 1>
<tag2>
.
.
</tag2>
</entity1>
<entity 2>
<tag1>
.
.
</tag1>
<tag2>
.
.
</tag2>
</entity2>
我需要删除标签让我们说tag2即整个..块。 我使用while循环来做这个,比如
while(str.indexOf("<tag2>")>=0)
{
strRepl=str.substring(str.indexOf("<tag2>"),str.indexOf("</tag2>")+7);
str=xmlString.replaceFirst(strRepl,"");
}
这是有效的,但我想了解是否有更好的方法来使用字符串来实现它? 请建议。
答案 0 :(得分:1)
您可以使用正则表达式。 Java提供了可以为您完成工作的Pattern和Matcher类。
String yourString = "<envelope><body><entity1></entity1></body></envelope>";
String REGULAR_EXPRESSION= "(\\<body>.+?\\</body>)";
Pattern pattern = Pattern.compile(REGULAR_EXPRESSION, Pattern.DOTALL | Pattern.MULTILINE);
Matcher matcher = pattern.matcher(hello);
if (matcher.find()) {
System.out.println(yourString.replaceAll(matcher.group(1), ""));
}
此处(\\<body>.+?\\</body>)
表示<body>
标记中包含标记的所有内容。
行matcher.group(1)
表示匹配字符串的位置。
如果您想要替换所有事件,只需使用
yourString = matcher.replaceAll("");
要替换第一次出现,只能使用:
yourString = matcher.replaceFirst("");
我不确定它是否适用于字符串中的新行“\ n”内容,如果字符串是单行,则可以使用:
System.out.println(yourString.replaceAll(REGULAR_EXPRESSION, ""));