Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中修剪无中断空间?_Java_String - Fatal编程技术网

如何在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
中,因此被删除。@Roland
Cfx
为我回答:)