我正在编写一个用于单元测试的函数。我想比较 XML 文件,但由于其中一个文件将由第三方库创建,因此我想减轻由于缩进不同而导致的任何可能差异。因此,我编写了以下函数:
private String normalizeXML(String xmlString) {
String res = xmlString.replaceAll("[ \t]+", " ");
// leading whitespaces are inconsistent in the resulting xmls.
res = res.replaceAll("^\\s+", "");
return res.trim();
}
但是,此函数不会删除 XML 每一行的前导间隔。
当我以这种方式编写函数时(第一个正则表达式的差异):
private String normalizeXMLs(String xmlString) {
String res = xmlString.replaceAll("\\s+", " ");
// leading whitespaces are inconsistent in the resulting xmls.
res = res.replaceAll("^\\s+", "");
return res.trim();
}
它确实删除了尾随空格,但它也使 xml 显示为单行,这在您需要比较差异时非常麻烦。
我只是无法证明为什么第一个实现不会取代领先区间。有任何想法吗?
编辑:更有趣的是,如果我进行单行操作:
String res = xmlString.replaceAll("^\\s+", "");
此行不会删除任何标识!