字符串内容是这样的:
<div ...>
<ul ...>
<li ...><a href="...">...</a></li>
...
</ul>
</div>
str.trim().split("\n");
结果与[<div ...>, <ul ...>, <li ...]
所以它没有真正理解String?!
我绕过了这个,迭代了str.split("\n")
的结果并修剪了结果数组中的每个字符串(行)。
即使它现在正在工作,我也不明白,为什么它不是之前(修剪整个字符串)?
有人知道吗?
答案 0 :(得分:1)
As said in the javadoc,String.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()
函数的
返回字符串的副本,省略前导和尾随空格。
如果此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)的结果。
此方法可用于从字符串的开头和结尾修剪空格(如上所述)。
<强>返回:强> 删除了前导和尾随空格的此字符串的副本,如果没有前导或尾随空格,则为此字符串。