如何在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."