从String中仅删除空格

时间:2012-09-12 05:41:57

标签: java string

我有一个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

的一部分

5 个答案:

答案 0 :(得分:3)

你能澄清你的意思吗?如果您的意思是空格其他而不是换行符,请尝试以下操作。

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

...或者,您是否意味着要删除无关的新行?

str = str.replaceAll("\n{2,}", "\n");

...或者您只想删除文字' '空格?

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

答案 1 :(得分:2)

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

编辑: 如果您需要其他人,请查看this question。你会在基督的答案中找到其他人。

答案 2 :(得分:2)

我建议使用正则表达式str.replaceAll("(</[^>]+>)\\s+(<[^>]+>)","$1\n$2")来检测标记之间的空格并将其删除。它只提供单行结束

答案 3 :(得分:1)

如果您使用DocumentBuilder修改XML,那么您也可以使用以下方法。

DocumentBuilderFactory.setIgnoringElementContentWhitespace

  

指定此工厂创建的解析器必须消除元素内容中的空格(有时称为“可忽略的空格”)

factory.setValidating(true);
factory.setIgnoringElementContentWhitespace(true);

答案 4 :(得分: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