java字符串替换空格符_特殊的空格(Java⽆法替换字符串中
的空格)转
⼀、⾃⼰的问题
先说⼀下⾃⼰碰到的问题,⾃⼰在本地建⽴了⼀个json⽂件,并且把它格式化了(为了看着美观);然后在Java后台中去读取(使⽤BufferedReader的readline⽅法),但是读取后的Json字符串总是带着⼀部分空⽩,使⽤了多种替换⽅式(trim,空格,换⾏符,制表符等)都⽆法消除空格,导致后续创建json对象时提⽰错误。
原因:是因为这个读取到的不是Java常见的空格字符,⽽是特殊的空格(ASCII值160,严格来说这个是扩展ASCII值的部分,因为原⽣ASCII最⼤只到127),因此不能使⽤常规的替换⽅式。
具体处理见下⽂(转载的博客,为了加深记忆,特意⼜放到⾃⼰的博客中)。
⼆、处理办法
最近遇到个问题,在页⾯的搜索框输⼊带有空格的字符串时,总是⽆法从db中搜索出来对应的数据,于是将db⾥的空格复制出来,发现其ASCII码值为160,这才知道,原来ASCII码中除了32之外还有160这个特殊的空格。下边是查看字符对应ASCII值的逻辑:
1 final char c1 = ' '; //db⾥的空格
2 final char c2 = ' '; //⼿动输⼊的空格
3 System.out.println((int)c1); //160
4 System.out.println((int)c2); //32
平时我们⽤键盘输⼊的空格的ASCII值是32,⽽这个ASCII值为160的空格,其实是不间断空格(non-breaking space),是不是从来没听说过这东东?其实你平时⼀定也⽤过很多次的,就是页⾯上的 所产⽣的空格。
不间断空格non-breaking space的缩写正是nbsp。这中空格的作⽤就是在页⾯换⾏时不被打断,如下:
1 页⾯某⼀⾏的末尾是⼀个⼈名Zhang Xiaoming
我们希望在换⾏时⼈名不会被打断,导致Zhang 在第⼀⾏末尾,⽽Xiaoming跑到第⼆⾏开头,⽽是保持完整的⼈名在同⼀⾏的末尾,于是就有了不间断空格。(在word中也有这种空格的使⽤)
如果使⽤了平常的空格,就会被页⾯压缩,变成下边这样
1 页⾯某⼀⾏的末尾是⼀个⼈名Zhang
2 Xiaoming
问题
但是不间断空格有个问题,就是它⽆法被trim()所裁剪,也⽆法被正则表达式的\s所匹配,也⽆法被StringUtils的isBlank()所识别,也就是说,⽆法像裁剪寻常空格那样移除这个不间断空格。
我们可以利⽤不间断空格的Unicode编码来移除它,其编码为\u00A0。
解决办法如下:
1 replace("\u00A0", "")
2 replaceAll("\\u00A0+", "") //这是正则表达式的写法
3
4 String str = "aacsdfe "; //包含了不间断空格的字符串
5 str = place("\u00A0", "");
6 str = placeAll("\\u00A0+", "");
————————————————
replaceall()以上内容⾮个⼈原创。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。