Java 为什么修剪不起作用?

Java 为什么修剪不起作用?,java,Java,字符串内容如下所示: <div ...> <ul ...> <li ...><a href="...">...</a></li> ... </ul> </div> 使用str.trim.split\n;结果类似于[,在str.trim.split\n示例中,您首先修剪整个字符串,然后在行尾拆分字符串。在第二种情况下,您首先拆分行,然后修剪每一

字符串内容如下所示:

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

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

        ...

    </ul>

</div>

使用str.trim.split\n;结果类似于[,在str.trim.split\n示例中,您首先修剪整个字符串,然后在行尾拆分字符串。在第二种情况下,您首先拆分行,然后修剪每一行。

您不了解trim是如何工作的。下面是JavaDoc for java.lang.string trim函数

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

如果此字符串对象表示空字符序列,或者此字符串对象表示的字符序列的第一个字符和最后一个字符的代码都大于“\u0020”空格字符,则返回对此字符串对象的引用

否则,如果字符串中没有代码大于“\u0020”的字符,则会创建并返回一个表示空字符串的新字符串对象

否则,k是代码大于'\u0020'的字符串中第一个字符的索引,m是代码大于'\u0020'的字符串中最后一个字符的索引

将创建一个新的字符串对象,表示该字符串的子字符串,该子字符串以索引k处的字符开始,以索引m处的字符结束,即this.substringk,m+1的结果

此方法可用于从字符串的开头和结尾修剪上面定义的空白

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

您要修剪整个字符串,然后进行拆分。您需要先拆分,然后修剪每一行:

String[] lines = str.split("\n");
for (int i=0; i<lines.length(); i++)
   lines[i] = lines[i].trim();
,String.split不会删除每行开头/结尾的空格,而是删除整个字符串开头/结尾的空格:

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

为此,您可以:

拆分字符串并在每个部分调用trim,就像您所做的那样

使用regexp实现多行修剪:

str = str.replaceAll("(?m)(^[\u0000-\u0020]+|[\u0000-\u0020]+$)", "");
m标志告诉Java在每行的开头和结尾接受锚定“^”和$进行匹配 [\u0000-\u0020]表示0到20之间的每个字符,trim javadoc将其定义为空白。 如果要删除字符串中的所有空格,即使它们不在行的开头/结尾,也可以使用regexp执行此操作。这还将删除新行,因为它们被视为空格:

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


请记住,字符串在Java中是不可变的,您应该将结果分配给一个新字符串。trim只对字符串的开头和结尾起作用,它不会在其中的某个地方删除空格。正如文档所述。它的唯一解决方案也是一样,就像我绕过这一点所做的那样:当然不会,您可以只使用替换方法:/i了解此函数错了,我以为它会删除字符串中的任何空格或制表符。
str = str.replaceAll("\\s+", "");