资讯专栏INFORMATION COLUMN

获取字符串 长度

pekonchan / 2654人阅读

摘要:使用编码,该编码使用一个比特的编码单元来表示大部分常见的字符,使用两个代码单元表示不常用的字符高位编码单元。因此返回值可能与字符串中实际的字符数量不相同。

String.length:
该属性返回字符串中字符编码单元的数量。JavaScript 使用 UTF-16 编码,该编码使用一个 16 比特的编码单元来表示大部分常见的字符,使用两个代码单元表示不常用的字符(高位编码单元)。因此 length 返回值可能与字符串中实际的字符数量不相同。MDN => String.length

高位编码单元 是使用一对(低位编码(lower valued))代理伪字符("surrogate" pseudo-characters)来表示,从而构成一个真正的字符。String.prototype.charCodeAt()

function strLen ( str ) {
    var len = 0,
        ret = 0, 
        i = 0,
        code,
        nextCode;
    
    if ( str == null ) return ret;

    str = String( str );
    len = str.length;
    
    if ( len == 0 ) return ret;

    for (;i < len; i++ ) {

        code = str[i].charCodeAt(0);

        if ( code >= 0xD800 && code <= 0xDBFF ) {
            nextCode = str[i + 1].charCodeAt(0);
            if ( nextCode >= 0xDC00 && nextCode <= 0xDFFF ) i++;
        }

        ret++;
    }
    return ret;
}
var str = "?";
str.length; // 2
strLen( str ); // 1

// ES6方法

function codePointLength (text) {
  var result = text.match(/[sS]/gu);
  return result ? result.length : 0;
}

编译后:

function codePointLength (text) {
  var result = text.match(/(?:[-uD7FFuE000-uFFFF]|[uD800-uDBFF][uDC00-uDFFF]|[uD800-uDBFF](?![uDC00-uDFFF])|(?:[^uD800-uDBFF]|^)[uDC00-uDFFF])/g);
  return result ? result.length : 0;
};

or

// ES6
function length(str) {
  return [...str].length;
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/82466.html

相关文章

  • 跟着大彬读源码 - Redis 7 - 对象编码之简单动态符串

    摘要:没有直接使用语言传统的字符串表示以空字符串结尾的字符数组,而是构建了一种名为简单动态字符串的抽象类型,并将用作的默认字符串表示。对比字符串,有几大优点常数复杂度获取字符串长度杜绝缓冲区溢出减少修改字符串时所需的内存重分配次数。 Redis 没有直接使用 C 语言传统的字符串表示(以空字符串结尾的字符数组),而是构建了一种名为简单动态字符串(simple dynamic string)的...

    baishancloud 评论0 收藏0
  • 获取最长回文子串

    摘要:以下是最长回文子串的相关代码,相关逻辑已在注释中注明我们原有的字符串可能存在两种回文子串,一种是具有基数个元素例如一种是具有偶数个元素例如这样的话分情况判断比较复杂所以我们对原字符串进行扩充在相邻元素中插入特殊值插入后的原基数回文子串变成了 以下是最长回文子串的Manacher‘s Algorithm相关代码,相关逻辑已在注释中注明: public static String solu...

    ymyang 评论0 收藏0
  • input限制输入长度

    摘要:功能产品需求需要限制字符长度为。中文个字符英文个字符考虑场景中文问题光标定位问题字符串截取问题。获取设置完后的长度获取原光标后有几个字符设置光标位置参考文献 功能 产品需求:input 需要限制字符长度为 10。(中文 2 个字符英文 1 个字符)考虑场景:input 中文问题、光标定位问题、字符串截取问题。 实现思路 实现上述需求需监听 3 个事件:input composition...

    toddmark 评论0 收藏0

发表评论

0条评论

pekonchan

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<