我输入了一个输入文件,我需要处理并丢弃所有空格,包括不间断空格U+00A0
又名 
(您可以通过按键在记事本中生成它 Alt 然后从键盘输入 0 1 6 0 数字键盘。)或任何其他形式的空白区域。我尝试了String.trim()
,但它并没有修剪U+00A0
。
我是否需要明确检查U+00A0
然后trim()
或者是否有一种简单的方法来修剪Java中的各种空格?
答案 0 :(得分:36)
虽然 
是non breaking space(一个不希望被视为空格的空格),但您可以使用简单的正则表达式修剪字符串,同时保留字符串中的每个 
:
string.replaceAll("(^\\h*)|(\\h*$)","")
\h
是一个水平的空白字符:[ \t\xA0\u1680\u180e\u2000-\u200a\u202f\u205f\u3000]
如果您使用的是JDK8之前版本,则需要明确使用字符列表而不是\h
。
答案 1 :(得分:22)
U+0160
不是空白,因此不会被修剪。但你可以简单replace()
带有空格的字符,然后调用trim()
,这样你就可以保留字符串里面的空格。
string = string.replace('\u00A0',' ').trim()
从Character.isWhitespace()方法中排除了three non-breaking whitespace个字符:\u00A0
,\u2007
和\u202F
,所以您可能也想要替换它们
答案 2 :(得分:3)
你可以用番石榴CharMatcher
来做,例如:
CharMatcher.anyOf("\r\n\t \u00A0").trimFrom(input);
CharMatcher.whitespace().trimFrom(input);
答案 3 :(得分:3)
您可以尝试以下方法:
string.replaceAll("\\p{Z}","");
来自https://www.regular-expressions.info/unicode.html:
\ p {Z}或\ p {Separator}:任何类型的空格或不可见的分隔符。
答案 4 :(得分:2)
如果您碰巧使用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."