我输入了一个输入文件,我需要处理并丢弃所有的空白区域,包括非破坏空间U+00A0aka  (您可以通过按键Alt然后0 1 6 0从键盘的数字键盘输入来在记事本中生成它.)或任何其他形式的白色空间.我试过String.trim()但它没有修剪U+00A0.
我是否需要明确检查U+00A0,然后trim()还是有一种简单的方法来修剪Java中的各种空格?
Cfx*_*Cfx 40
虽然 是一个非中断空间(一个不希望被视为空格的空间),但您可以修剪一个字符串,同时 使用简单的正则表达式保留字符串中的每个字符串:
string.replaceAll("(^\\h*)|(\\h*$)","")
Run Code Online (Sandbox Code Playgroud)
\h 是一个水平的空白字符: [ \t\xA0\u1680\u180e\u2000-\u200a\u202f\u205f\u3000]如果您使用的是JDK8之前版本,则需要明确使用字符列表而不是\h.
Rob*_*bAu 23
U+0160不是空白,所以它不会被修剪.但是你可以简单地replace()用带空格的字符,然后调用trim(),这样你就可以保留字符串里面的空格.
string = string.replace('\u00A0',' ').trim()
Run Code Online (Sandbox Code Playgroud)
有三个非打破空白被排除在Character.isWhitespace()方法的字符:\u00A0,\u2007和\u202F,所以你可能要替换这些呢.
log*_*sex 15
你可以试试这个:
string.replaceAll("\\p{Z}","");
Run Code Online (Sandbox Code Playgroud)
来自https://www.regular-expressions.info/unicode.html:
\p{Z} 或 \p{Separator}:任何类型的空格或不可见的分隔符。
如果您碰巧使用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."
Run Code Online (Sandbox Code Playgroud)