为什么修剪不起作用?

时间:2014-12-09 08:42:33

标签: java

字符串内容是这样的:

 <div ...>
    <ul ...>

        <li ...><a href="...">...</a></li>

        ...

    </ul>

</div>

str.trim().split("\n");结果与[<div ...>, <ul ...>, <li ...]

类似

所以它没有真正理解String?!

我绕过了这个,迭代了str.split("\n")的结果并修剪了结果数组中的每个字符串(行)。

即使它现在正在工作,我也不明白,为什么它不是之前(修剪整个字符串)?

有人知道吗?

4 个答案:

答案 0 :(得分:1)

As said in the javadocString.split()不会删除每行开头/结尾的空格,而是整个String的开头/结尾:

  

返回字符串的副本,省略前导和尾随空格。   [...]   此方法可用于从字符串的开头和结尾修剪空白(如上所述)。

为此,你可以:

  • split() String并在每个部分致电trim(),就像您一样

  • 使用正则表达式实现&#34;多行修剪&#34;:

    str = str.replaceAll("(?m)(^[\u0000-\u0020]+|[\u0000-\u0020]+$)", "");
    
    • (?m)标志告诉Java接受锚点^$以匹配每行的开头和结尾
    • [\u0000-\u0020]表示从0到20的每个字符(由trim() javadoc定义为空格。

如果要删除String中的所有空格(即使它们不在行的开头/结尾),也可以使用正则表达式执行此操作(这也会删除新行,因为它们被视为空格):

str = str.replaceAll("[\u0000-\u0020]+", "");

str = str.replaceAll("\\s+", "");

答案 1 :(得分:0)

在您的情况str.trim().split("\n");中,您首先修剪整个字符串,然后在行尾分割字符串。在第二种情况下,首先拆分线然后修剪每一行。

答案 2 :(得分:0)

你正在削减整个事情,然后分裂。你需要的是先拆分,然后修剪每条线:

String[] lines = str.split("\n");
for (int i=0; i<lines.length(); i++)
   lines[i] = lines[i].trim();

答案 3 :(得分:-1)

你不明白修剪是如何运作的。这是java.lang.String trim()函数的

的JavaDoc

返回字符串的副本,省略前导和尾随空格。

如果此String对象表示空字符序列,或者此String对象表示的字符序列的第一个和最后一个字符的代码都大于&#39; \ u0020&#39; (空格字符),然后返回对此String对象的引用。

否则,如果没有代码大于&#39; \ u0020&#39;在字符串中,然后创建并返回表示空字符串的新String对象。

否则,让k为字符串中第一个字符的索引,其代码大于&#39; \ u0020&#39;,并且让m为字符串中代码大于的最后一个字符的索引&#39; \ u0020&#39 ;.

创建一个新的String对象,表示该字符串的子字符串,该字符串以索引k处的字符开头,以索引m处的字符结尾,即this.substring(k,m + 1)的结果。

此方法可用于从字符串的开头和结尾修剪空格(如上所述)。

<强>返回: 删除了前导和尾随空格的此字符串的副本,如果没有前导或尾随空格,则为此字符串。