如何在Java中修剪无中断空间?
我已经输入了一个输入文件,需要对其进行处理并丢弃所有空白,包括非中断空格如何在Java中修剪无中断空间?,java,string,Java,String,我已经输入了一个输入文件,需要对其进行处理并丢弃所有空白,包括非中断空格U+00A0aka (您可以在记事本中按Alt键,然后在键盘的数字键盘上键入0 1 6 0)或任何其他形式的空白。我试过了,但它没有修剪U+00A0 我是否需要显式地检查U+00A0然后trim()或者有没有一种简单的方法来修剪Java中的各种空白?U+0160不是空白,所以它不会被修剪。但是您可以简单地用空格替换(),然后调用trim(),这样就可以保留字符串中的空格 string = string.replace
U+00A0
aka 代码>(您可以在记事本中按Alt键,然后在键盘的数字键盘上键入0 1 6 0)或任何其他形式的空白。我试过了,但它没有修剪U+00A0
我是否需要显式地检查U+00A0
然后trim()
或者有没有一种简单的方法来修剪Java中的各种空白?U+0160
不是空白,所以它不会被修剪。但是您可以简单地用空格替换()
,然后调用trim()
,这样就可以保留字符串中的空格
string = string.replace('\u00A0',' ').trim()
有一些字符被排除在字符之外。isWhitespace()方法:
\u00A0
,\u2007
和,\u202F
,因此您可能也希望替换这些字符。您可以用番石榴来做,例如:
CharMatcher.anyOf("\r\n\t \u00A0").trimFrom(input);
CharMatcher.whitespace().trimFrom(input);
另请参见此而和#160
是一个(不希望被视为空白的空间),您可以在保留每个 使用简单正则表达式在字符串中编写代码>:
string.replaceAll("(^\\h*)|(\\h*$)","")
\h
是一个水平空白字符:[\t\xA0\u1680\u180e\u2000-\u200a\u202f\u205f\u3000]
如果您使用的是JDK8之前的版本,则需要显式使用字符列表,而不是\h
如果碰巧使用了,则可以使用并添加所需的所有字符
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."
您可以尝试以下方法:
string.replaceAll("\\p{Z}","");
发件人:
\p{Z}或\p{Separator}:任何类型的空白或不可见分隔符
那么String
replace变量呢?当你说“all”时,你是指all吗?是的,replace变量:之前没有想到:|“all”和all之间有什么区别?如果问题是关于删除字符串中的所有无中断空格,那么问题是错误的,公认的答案是完美的。如果问题是关于删减不间断空格,那么接受的答案是错误的。@ForguesR您能解释一下问题或答案是如何错误的吗?您在列表中输入了更多的空格字符。指向空格定义的链接已失效。它起作用了!!谢谢:)我想,我需要显式地处理所有空格()&一个接一个,对吗?trim()
将处理列为java空格的所有字符,因此您不需要添加所有空格字符。请参见此处:但这会将“内部”NBSP更改为普通空格,可能不是您想要的。“  foo  35 nbsp”将变为“foo 35”,而不是“foo”。@ViktorMellgren是的,但OP要求:我输入了一个输入文件,需要处理并丢弃所有空白。这是迄今为止最干净、最通用的解决方案。值得一提的是,\h
仅在Java8之后才可用,但在早期版本中,您可以使用答案中给出的显式范围。这太棒了!完全是一个单行程序,它将处理所有类型的空格。有一件事可能会有帮助,那就是它们有一个Unicode分类的空格分隔符。我喜欢将此页作为对所包含内容的参考,因为Unicode官方内容有点枯燥:您认为为什么不删除\u00A0
?请看地图。它声明此字符包含在\h
中,因此被删除。@RolandCfx
为我回答:)