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 页面某一行的末尾是一个人名Zhang2 Xiaoming
问题
但是不间断空格有个问题,就是它无法被trim()所裁剪,也无法被正则表达式的\s所匹配,也无法被StringUtils的isBlank()所识别,也就是说,无法像裁剪寻常空格那样移除这个不间断空格。
我们可以利用不间断空格的Unicode编码来移除它,其编码为\u00A0。
解决办法如下:
1 replace("\u00A0", "")2 replaceAll("\\u00A0+", "") //这是正则表达式的写法
3
4 String str = "aacsdfe "; //包含了不间断空格的字符串
5 str = str.replace("\u00A0", "");6 str = str.replaceAll("\\u00A0+", "");
————————————————
以上内容非个人原创。
附原文链接:https://blog.csdn.net/lewky_liu/article/details/79353151
java字符串替换空格符_特殊的空格(Java无法替换字符串中的空格)转相关推荐
- java字符串替换空格符_字符串替换空格
题目描述 请实现一个函数,将一个字符串中的每个空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 解题思路 ...
- java中字符串的创建_【转载】 Java中String类型的两种创建方式
本文转载自 https://www.cnblogs.com/fguozhu/articles/2661055.html Java中String是一个特殊的包装类数据有两种创建形式: String s ...
- java m4a文件拼接_面试官:为啥不提倡字符串拼接?看阿里java开发手册怎么说
阿里规约 先来看阿里java开发手册的第22条,循环体内,字符串的连接方式,使用 StringBuilder 的 append 方法进行扩展. 说明:下例中,反编译出的字节码文件显示每次循环都会 ne ...
- java date 没有毫秒_关于date:Java:秒和毫秒均为0时,DateTimeFormatter无法解析时间字符串吗?...
基本上,我使用以下代码将字符串解析为LocalDateTime,在大多数情况下都可以正常工作. DateTimeFormatter dtformatter = DateTimeFormatter.of ...
- python 菜鸟教程字符串反转函数_转自python的菜鸟教程---字符串相关操作
Python 字符串 字符串是 Python 中最常用的数据类型.我们可以使用引号来创建字符串. 创建字符串很简单,只要为变量分配一个值即可.例如: var1 ='Hello World!'var2 ...
- java list e 查找_源码(04) -- java.util.ListE
java.util.List 源码分析(JDK1.7) ------------------------------------------------------------------------ ...
- python字符串怎么用_零基础如何使用python处理字符串?
摘要:Python的普遍使用场景是自动化测试.爬取网页数据.科学分析之类,这其中都涉及到了对数据的处理,而数据的表现形式很多,今天我们来讲讲字符串的操作. 字符串是作为任意一门编程语言的基础,在Pyt ...
- java 基础 笔试题_非常全面的java基础笔试题
1.下列说法正确的是() (程序结构) A java程序的main方法必须写在类甩面 B java程序中可以有多个main方法 C.java程序中类名必须与文件名一样 D.JAVA程序的main方法中 ...
- java list sublist方法_(转)Java 中 List.subList() 方法的使用陷阱
原文:http://blog.csdn.net/cleverGump/article/details/51105235 前言 本文原先发表在我的 iteye博客: http://clevergump. ...
最新文章
- npjsba-2018-用肠道微生物模型指导个性化膳食缓解局部性肠炎
- ExtJs与JavaScript的call方法
- concurrenthashmap 1.7/1.8
- Cpp / 通用引用、引用折叠与完美转发问题
- CodeForces - 1213E Two Small Strings(暴力+构造)
- 美团下一代服务治理系统 OCTO 2.0 的探索与实践
- APUE读书笔记-09进程关系(07)
- java分部积分任务代码实现_数值积分 Java 实现
- 唐山大地震 昨夜万人首映 尚雯婕演唱《23秒,32年》使观众情绪得以第二次温暖爆发...
- 【深度学习】你该会的精选面试题(二)
- linux_grep操作
- java中操作docker
- 无锡高二计算机会考内容,无锡期中考试卷分析,看一看高一高二高三数学都考了哪些...
- Linux用户层和内核文件读写
- linux apple开发环境,Linux上构筑iPhone OS3.1.2开发环境 实例操作
- 三个理由告诉你 为什么社保不能断缴
- 自己封装的element-ui的table插件,实现render渲染,插槽等功能
- 标准的镜头质量评测方法——MTF(Modulation Transfer Function)
- cisco路由器各接口模块代表的含义是什么
- M2M技术,主要包含哪几个重要的技术部分
热门文章
- 飞鸽传书官方网站 创立黑马程序员训练营
- 我们究竟该看待百度更新?
- 爱国者首款手机正式上市 零售价不超2000元
- 什么90%的人,自学python都不能学会,原来问题出在这,赶紧看看!
- mysql union_Mysql union和union all用法
- requestparam的作用_Spring MVC:请解释@RequestParam和@ModelAttribute之间的区别
- dqn系列梳理_DQN是学习归纳出了策略,还是仅仅是memorize了大量的episodes?
- python图像处理教程_Python基于Tensor FLow的图像处理操作详解
- Nature公开1300多篇论文工厂论文的期刊分布,这个杂志高居榜首
- 为啥我的Python这么慢 (一)