如何在Java中修剪不间断空间?

时间:2015-02-03 09:32:08

标签: java string

我输入了一个输入文件,我需要处理并丢弃所有空格,包括不间断空格U+00A0又名 (您可以通过按键在记事本中生成它 Alt 然后从键盘输入 0 1 6 0 数字键盘。)或任何其他形式的空白区域。我尝试了String.trim(),但它并没有修剪U+00A0

我是否需要明确检查U+00A0然后trim()或者是否有一种简单的方法来修剪Java中的各种空格?

5 个答案:

答案 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);

另见nice reference on whitespaces definition

答案 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."