一、自己的问题

先说一下自己碰到的问题,自己在本地建立了一个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无法替换字符串中的空格)转相关推荐

  1. java字符串替换空格符_字符串替换空格

    题目描述 请实现一个函数,将一个字符串中的每个空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 解题思路 ...

  2. java中字符串的创建_【转载】 Java中String类型的两种创建方式

    本文转载自 https://www.cnblogs.com/fguozhu/articles/2661055.html Java中String是一个特殊的包装类数据有两种创建形式: String s ...

  3. java m4a文件拼接_面试官:为啥不提倡字符串拼接?看阿里java开发手册怎么说

    阿里规约 先来看阿里java开发手册的第22条,循环体内,字符串的连接方式,使用 StringBuilder 的 append 方法进行扩展. 说明:下例中,反编译出的字节码文件显示每次循环都会 ne ...

  4. java date 没有毫秒_关于date:Java:秒和毫秒均为0时,DateTimeFormatter无法解析时间字符串吗?...

    基本上,我使用以下代码将字符串解析为LocalDateTime,在大多数情况下都可以正常工作. DateTimeFormatter dtformatter = DateTimeFormatter.of ...

  5. python 菜鸟教程字符串反转函数_转自python的菜鸟教程---字符串相关操作

    Python 字符串 字符串是 Python 中最常用的数据类型.我们可以使用引号来创建字符串. 创建字符串很简单,只要为变量分配一个值即可.例如: var1 ='Hello World!'var2 ...

  6. java list e 查找_源码(04) -- java.util.ListE

    java.util.List 源码分析(JDK1.7) ------------------------------------------------------------------------ ...

  7. python字符串怎么用_零基础如何使用python处理字符串?

    摘要:Python的普遍使用场景是自动化测试.爬取网页数据.科学分析之类,这其中都涉及到了对数据的处理,而数据的表现形式很多,今天我们来讲讲字符串的操作. 字符串是作为任意一门编程语言的基础,在Pyt ...

  8. java 基础 笔试题_非常全面的java基础笔试题

    1.下列说法正确的是() (程序结构) A java程序的main方法必须写在类甩面 B java程序中可以有多个main方法 C.java程序中类名必须与文件名一样 D.JAVA程序的main方法中 ...

  9. java list sublist方法_(转)Java 中 List.subList() 方法的使用陷阱

    原文:http://blog.csdn.net/cleverGump/article/details/51105235 前言 本文原先发表在我的 iteye博客: http://clevergump. ...

最新文章

  1. npjsba-2018-用肠道微生物模型指导个性化膳食缓解局部性肠炎
  2. ExtJs与JavaScript的call方法
  3. concurrenthashmap 1.7/1.8
  4. Cpp / 通用引用、引用折叠与完美转发问题
  5. CodeForces - 1213E Two Small Strings(暴力+构造)
  6. 美团下一代服务治理系统 OCTO 2.0 的探索与实践
  7. APUE读书笔记-09进程关系(07)
  8. java分部积分任务代码实现_数值积分 Java 实现
  9. 唐山大地震 昨夜万人首映 尚雯婕演唱《23秒,32年》使观众情绪得以第二次温暖爆发...
  10. 【深度学习】你该会的精选面试题(二)
  11. linux_grep操作
  12. java中操作docker
  13. 无锡高二计算机会考内容,无锡期中考试卷分析,看一看高一高二高三数学都考了哪些...
  14. Linux用户层和内核文件读写
  15. linux apple开发环境,Linux上构筑iPhone OS3.1.2开发环境 实例操作
  16. 三个理由告诉你 为什么社保不能断缴
  17. 自己封装的element-ui的table插件,实现render渲染,插槽等功能
  18. 标准的镜头质量评测方法——MTF(Modulation Transfer Function)
  19. cisco路由器各接口模块代表的含义是什么
  20. M2M技术,主要包含哪几个重要的技术部分

热门文章

  1. 飞鸽传书官方网站 创立黑马程序员训练营
  2. 我们究竟该看待百度更新?
  3. 爱国者首款手机正式上市 零售价不超2000元
  4. 什么90%的人,自学python都不能学会,原来问题出在这,赶紧看看!
  5. mysql union_Mysql union和union all用法
  6. requestparam的作用_Spring MVC:请解释@RequestParam和@ModelAttribute之间的区别
  7. dqn系列梳理_DQN是学习归纳出了策略,还是仅仅是memorize了大量的episodes?
  8. python图像处理教程_Python基于Tensor FLow的图像处理操作详解
  9. Nature公开1300多篇论文工厂论文的期刊分布,这个杂志高居榜首
  10. 为啥我的Python这么慢 (一)