从字符串中仅删除空格

3

我有一个字符串,其中包含XML数据。在删除一些节点和添加一些节点之后,XML数据中存在很多空格(这些空格是在删除节点时创建的)。

<A>
<B>
</B>

<!-- some node i deleted and lot of white spaces -->



<c>
</c>


<!-- some more node i deleted and lot of white spaces -->




<E>
</E>

字符串操作后的期望输出

<A>
<B>
</B>
<c>
</c>
<E>
</E>
</A>

我可以使用replaceAll("\s",""),但这会连同换行符一起删除,导致XML结构混乱,无法在UI中显示。
有没有一种方法可以修剪它,而不修剪换行符?
编辑:此XML数据是OMElement的一部分。

1
如何将连续的两个换行符替换为一个? - Thilo
3
你尝试过使用 str.replaceAll("\n+", "\n") 吗? - obataku
1
你可以使用 replaceAll(" ", "") 来删除文档中的所有空格,或者像 replaceAll(">\s+<", "\n") 这样替换标签之间的所有空格字符(包括空格、制表符和换行符)为单个换行符。 - michael
是的,我尝试了str.replaceAll("\n+", "\n")。但它给了我想要的结果。String strXmlData = xmlLoadData.toString(); strXmlData = strXmlData.replaceAll("\n+", "\n");原始的strXmlData和替换后的值是相同的。 - Dheeraj Joshi
5个回答

3

你能澄清一下你的意思吗?如果你是指除了换行以外的空格,可以尝试以下方法。

str = str.replaceAll("[ \t\x0B\f\r]", "");

您希望翻译的是:“...或者,您是否意味着您想要删除多余的换行符?”
str = str.replaceAll("\n{2,}", "\n");

您是想完全删除字面上的空格' '还是只想删除一部分空格?

str = str.replace(" ", "");

是的,我尝试了str.replaceAll("\n+", "\n")。但它没有给我想要的结果。String strXmlData = xmlLoadData.toString(); strXmlData = strXmlData.replaceAll("\n+", "\n");原始的strXmlData和替换后的结果是相同的。 - Dheeraj Joshi
@DheerajJoshi 你能告诉我们 str.replaceAll("(\\s)+", "\\1"); 是什么意思吗? - obataku
不,它没有按照我想要的方式给我字符串 :( - Dheeraj Joshi
@DheerajJoshi 你能具体一点吗? - obataku
@oldrib。它试图删除所有空格和换行符,而不仅仅是空格。它会删除<A>和<B>之间的换行符。我的意图是仅删除</B>和<C>之间以及</c>和<E>之间的那些额外行。基本上从节点B的结束标记到标记C的开始节点,以及从节点c的结束标记到节点E的开始标记。 - Dheeraj Joshi

2

尝试使用someString.replaceAll("\\u0020","")。这个字符串是空格的编码,应该可以完成任务。

编辑: 如果你需要其他的,请看看这个问题。在tchrist的答案中你会找到其他的。


2

我建议使用正则表达式 str.replaceAll("(</[^>]+>)\\s+(<[^>]+>)","$1\n$2"),它可以检测标签之间的空格并将其删除。只留下单个换行符。


1

我正在使用XMLInputFactory创建新的XML。 - Dheeraj Joshi

0

有一种代价高昂的方法可以做到这一点。

Scanner scanner = new Scanner(str);
StringBuffer strBuff = new StringBuffer();
while(scanner.hasNextLine()){
       String line = scanner.nextLine();
           if(line.length() > 0 && !line.trim().equals("")){
                 strBuff.append("\n");
         strBuff.append(line);
       }
}

最终,当循环结束时,我们可以从xml中删除空行,并使xml格式正确。正如您所见,对于大型xml来说,这并不理想,因为会在内部创建许多xml字符串对象。
敬礼
Dheeraj Joshi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接