专栏首页算法与编程之美JavaScript|计算字符串的字节数

JavaScript|计算字符串的字节数

问题描述

问题中提到计算字节数,首先需要对字节进行了解,Byte数是一个单位计量数值,其中字符串中单个的字符(英文、数字、特殊字符等)为一个字节,中文汉字是两个字节。

解决方案

1.正则表达式法

由于中英文字符所占字节数不一样,但英文字符字节数和字符长度一致,因此,可以将一个中文字符替换为两个任意英文字符,便能直接用length计数。

因为JS使用Unicode编码,因此,这里用[^\x0000-\x00ff]来匹配中文汉字字符(双字节字符)。

代码如下:

function getBytesLength(str) {

     return str.replace(/[^\x0000-\x00ff]/g, '我是xxx').length;

}

2.循环判断计数法

这里依然需要用正则判断为中文字符或英文字符,英文字符计数累加1,中文字符计数累加2。

需要用到JS中的函数:charAt(num) 获取字符串的num位置的字符。

代码如下:

var str='我是xxx';

function BytesCount(str){

     var cnt = 0;

     for(var i=0; i<str.length; i++){

              var c = str.charAt(i);

         if(/^[\u0000-\u00ff]$/.test(c)){

                        cnt++;

              }else{

                        cnt+=2;

              }

     }

     return len;

}

结语

本例中在使用正则表达式时,使用的是匹配双字节字符的[^\x0000-\x00ff],其中也包含中文字符;而专门匹配中文字符的正则表达式是[\u4e00-\u9fa5]。

END

主 编 | 王楠岚

责 编 | wrape

本文分享自微信公众号 - 算法与编程之美(algo_coding),作者:wrape

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-07-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • HTML|实体解析器(题解)

    HTML 实体解析器「HTML 实体解析器」 是一种特殊的解析器,它将 HTML 代码作为输入,并用字符本身替换掉所有这些特殊的字符实体。

    算法与编程之美
  • 微信小程序|Tab标签页

    在使用小程序的时候会看到大多数都是在小程序的底部设置导航栏,然而会发现有一些小程序的顶部也会有导航栏,那么如何来设置小程序的Tab标签页呢?

    算法与编程之美
  • 算法 | KMP字符串匹配

    Python字符串str是在Python编写程序过程中,最常见的一种基本数据类型。字符串是许多单个子串组成的序列,其主要是用来表示文本。字符串是不可变数据类型,...

    算法与编程之美
  • 正则表达式的规则

    黑泽君
  • 快速学习-Scala字符型

    字符类型可以表示单个字符,字符类型是Char, 16位无符号Unicode字符(2个字节), 区间值为 U+0000 到 U+FFFF

    cwl_java
  • 漫画:如何优化 “字符串匹配算法”?

    说起“字符串匹配”,恐怕算得上是计算机领域应用最多的功能之一,为了满足这一需求,聪明的计算机科学家们发明了许多巧妙的算法。

    小灰
  • LuaJit转义的问题

    之前在项目中,处理类似!30转为表现的字符串时,有人写了这样的一段代码“\![1-2][0-9]”,当换成luajit时启动报错了,出错原因在于转义字符使用不对...

    meteoric
  • TextScanner:旷视新作文字识别新突破,确保字符阅读顺序

    由于深度学习和海量数据的涌现,场景文字识别技术获得飞速发展。但是先前同类方法存在种种缺点,为此,本文提出 TextScanner,一种鲁棒的基于分割的场景文字识...

    CV君
  • Java之字符流读写文件、文件的拷贝

    爱学习的孙小白
  • 关于多字节、宽字节、WideCharToMultiByte和MultiByteToWideChar函数的详解

    所谓的短字符,就是用8bit来表示的字符,典型的应用是ASCII码. 而宽字符,顾名思义,就是用16bit表示的字符,典型的有UNICODE. *******...

    林冠宏-指尖下的幽灵

扫码关注云+社区

领取腾讯云代金券