如何在Java中修剪不间断空间?
我输入了一个输入文件,我需要处理并丢弃所有的空白区域,包括不间断的空间U+00A0
aka
(您可以在记事本中通过按Alt键然后从键盘的数字键盘输入0 1 6 0来生成它。)或任何其他forms的空白区域。 我试过String.trim()
但它没有修剪U+00A0
。
我是否需要显式检查U+00A0
然后trim()
或者是否有一种简单的方法来修剪Java中的各种空格?
虽然
是一个非破坏空间 (一个不希望被视为空格的空间),你可以修剪一个字符串,同时保留每个
在带有简单正则表达式的字符串中:
string.replaceAll("(^\\h*)|(\\h*$)","")
-
\h
是一个水平的空格字符:[ \t\xA0\u1680\u180e\u2000-\u200a\u202f\u205f\u3000]
如果您使用的是JDK8之前版本,则需要明确使用字符列表而不是\h
。
U+0160
不是空白,因此不会被修剪。 但是你可以简单地replace()
空格replace()
那些字符,然后调用trim()
,这样你就可以保留字符串里面的空格。
string = string.replace('\u00A0',' ').trim()
从Character.isWhitespace()方法中排除了三个不间断的空格字符: \u00A0
, \u2007
和\u202F
,因此您可能也想要替换它们。
你可以用番石榴CharMatcher
,例如:
CharMatcher.anyOf("\r\n\t \u00A0").trimFrom(input);
另请参阅关于空格定义的这个很好的参考
如果您碰巧使用Apache Commons Lang,那么您可以使用strip并添加所需的所有字符。
final String STRIPPED_CHARS = " \t\u00A0\u1680\u180e\u2000\u200a\u202f\u205f\u3000"; String s = "\u3000 \tThis str contains a non-breaking\u00A0space and a\ttab. "; s = StringUtils.strip(s, STRIPPED_CHARS); System.out.println(s); // Gives : "This str contains a non-breaking space and a tab."