作者:温绍锦(高铁)   阿里云计算平台团队

在Parser场景,包括SQL Parser和JSON Parser,如何更快检测空白字符是一个提升性能的关键点。笔者有多年SQL Parser和JSON Parser的经验,把我所知道的一些检测空白的方法分享给大家。

一、什么是空白字符

如果采用json.org的标准,空白字符包括:

'\b' -- ASCII 8
'\t' -- ASCII 9
'\n' -- ASCII 10
'\f' -- ASCII 12
'\r' -- ASCII 13
' '  -- ASCII 32

二、检测空白字符的5种方法

2.1 方法1

JDK的Character提供了isWhiteSpace方法,逻辑不能定制化,不支持上面的'\b'字符判空,但为了性能比较,也加入进来。

boolean space = Character.isWhitespace(ch);

2.1 方法2

这个常规办法,用6个并列的or判断。所有的字符检测都需要做6次判断,性能较差。

boolean space = ch == ' '|| ch == '\n'|| ch == '\r'|| ch == '\f'|| ch == '\t'|| ch == '\b';

2.2 方法3

由于空白字符最大的是空格ASCII 32,在方法2的基础上先做一个预先检测,这样就能获得非常好的性能,但当输入的有大量空白字符\b时,就就会面临方法2的问题。fastjson 1.x ( GitHub - alibaba/fastjson: A fast JSON parser/generator for Java. )判空用的是这个方法。

boolean space = ch <= ' '&& (ch == ' '|| ch == '\n'|| ch == '\r'|| ch == '\f'|| ch == '\t'|| ch == '\b');

2.3 方法4

这种算法,在JDK 17下性能有较大提升。在大量输入是非空字符时,性能并不出色。

boolean space;
switch (ch) {case ' ':case '\n':case '\r':case '\t':case '\b':case '\f':space = true;break;default:space = false;break;
}

2.4 方法5

通过预计算一个常量的long,然后做bitAnd判断。
fastjson2 ( GitHub - alibaba/fastjson2:

如何快速检测是否为空白字符相关推荐

  1. Unix/Linux提权漏洞快速检测工具unix-privesc-check

    Unix/Linux提权漏洞快速检测工具unix-privesc-check unix-privesc-check是Kali Linux自带的一款提权漏洞检测工具.它是一个Shell文件,可以检测所在 ...

  2. 服务器SSL/TLS快速检测工具TLLSSLed

    服务器SSL/TLS快速检测工具TLLSSLed 现在SSL和TLS被广泛应用服务器的数据加密中,如网站的HTTPS服务.所以,在渗透测试中如何快速检测服务器的SSL和TLS配置寻找安全漏洞,就显得很 ...

  3. 在 windows 命令行下快速检测与排除网络故障

    电子科技大学微软技术俱乐部 梁晨 当我们组建好了一个小型局域网后,为了使网络运转正常,网络维护就显得格外重要.由于网络协议和网络设备的复杂性,许多故障解决起来绝非像解决单机故障那么简单.网络故障的定位 ...

  4. 测试电视是不是4k的软件,怎么判断4K电视真假?教你快速检测的方法!

    原标题:怎么判断4K电视真假?教你快速检测的方法! 4K电视从进入市场之后一直都受到企业的力捧,随着电视企业对4K电视的大力度宣传和消费环境的逐渐成熟,越来越多的消费者开始认可4K电视,并在购机时表明 ...

  5. 遇到代码缺陷不要慌,马上教你快速检测和修复

    摘要:人类思维中总存在缺陷,写出的代码一样会存在缺陷,导致软件系统出现不符合预期的行为.本文讨论了软件缺陷的定义.分类.检测和修复. 人类思维中总存在缺陷,写出的代码一样会存在缺陷,导致软件系统出现不 ...

  6. 一滴血、15分钟!钟南山指导研制试剂盒有望快速检测出结果

    疫情期间,最辛苦的还是在一线奋战的医务人员,功夫不负有心人,近日,不断传来好消息,新冠病毒检测再提速,目前最快1滴血15分钟可获结果. 据央视新闻最新报道,昨天,呼吸疾病国家重点实验室对外透露,近日, ...

  7. 教你一种U盘病毒的快速检测方法

    U盘对大多数人来说已经不再陌生,它是我们进行文件传输的基本工具.我们可以利用U盘快捷地管理和传输文件,正因为它的轻便,使用U盘的人越来越多.大众化的趋势也滋生了病毒的猖狂,当U盘与电脑连接之后便可能会 ...

  8. 机器视觉齿轮质量快速检测

    机器视觉齿轮质量快速检测 齿轮作为一种泛用性比较强的机械零件,其精度对机械产品性能有着重要影响.提高齿轮检测技术使提高齿轮产品质量的必要保证,由于齿轮形状的特点,其检测项目众多,测量过程复杂,测量设备 ...

  9. 2023微信手机号筛选器,快速检测出开通微信的号码,检测国外号码过滤微信状态,判断qq是否开通微信软件

    筛选开通微信的号码后,提升加粉效率, | 微信筛选器可以快速检测出哪些开通微信的号码,和未开通的,分开保存,微信筛选过滤,手机号检测是否开通微信,QQ开通微信检测, #微信筛选器# #微信过滤检测# ...

最新文章

  1. Docker容器中数据两种持久化存储方式:卷和挂载宿主目录
  2. redis中密码设置
  3. phpstudy卸载mysql_PHPstudy卸载和phpstudy卸载详解
  4. 可能大家都能跑通的ignite的HelloWorld
  5. linux文件系统 环形结构图,环形缓冲器(转)
  6. 从源码分析RocketMQ系列-消息拉取PullMessageProcessor详解
  7. php foreach 循环 判断index 小于多少_Go 与 PHP 的语法对比
  8. 深入理解计算机系统(2.7)------二进制小数和IEEE浮点标准
  9. callback回调使用 vue_Vue实现剪切板图片压缩
  10. 质量小的夸克之间,如何互换质量大的胶子
  11. linux 部署 ibase4j,ibase4j学习
  12. 解决mac可以聊QQ微信不能浏览网页问题
  13. Tyvj 1728 普通平衡树
  14. 眼光独到便能发现刷脸支付带来的商机
  15. 孟岩:我反对将Token翻译成“代币”
  16. PS效果——斜面浮雕
  17. FPGA驱动RGB灯带WS2812B
  18. 查看进程名称 linux,在Linux系统服务器按名称查找进程的命令
  19. 吴恩达机器学习个人笔记03——多变量线性回归
  20. matlab 雷达系统界面,基于Matlab的雷达系统仿真软件包设计与实现

热门文章

  1. PYTHON表白代码:还有半个月就要圣诞啦~初雪要来了么?心软的神还会远吗(不知道怎么开口表白的小可爱还不赶紧把素材备好)
  2. AVG2013nbsp;杀毒软件激活nbsp;…
  3. EasyFloat:浮窗从未如此简单
  4. Google Drive文件下载
  5. arcgis唯一值数已达到默认限制(大于3365536).
  6. 详解 Chrome 「V8 」引擎,让你更懂JavaScript !
  7. 【狂神说】 Redis 笔记分享
  8. 高校被盗邮箱处置的运维经验分享-清华大学
  9. Lombok插件之简介、IDEA集成、注解使用
  10. 微电子技术和计算机技术属于什么技术群,2012普通高中信息技术学业水平考试 (一)...