获取字符串实际长度(包含中英文)

日常开发过程中,经常会遇到需要计算字符串的实际长度(包含中英文),今天整理下我平时使用的方法:

方法一:使用charCodeAt()来判断字符编码

charCodeAt() 方法可返回指定位置的字符的 Unicode 编码。这个返回值是 0 - 65535 之间的整数。
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <script>
    /**
     * 获取字符串实际长度(包含中英文)
     * @param str  要获得长度的字符串
     */
    var zfc = {};
    zfc.getStringLength = function (str) {
      var realLength = 0, len = str.length, charCode = -1;
      for (var i = 0; i < len; i++) {
        charCode = str.charCodeAt(i);
        if (charCode >= 0 && charCode <= 128)
          realLength += 1;
        else
          realLength += 2;
      }
      return realLength;
    };
    console.log(zfc.getStringLength('aaa获取字符sfdsf串实际长度(包含中英文)sdfdsf'))
  </script>
</head>
<body>

</body>
</html>

方法二: 简化版使用charCodeAt()来判断字符编码 

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <script>
    /**
     * 获取字符串实际长度(包含中英文)
     * @param str  要获得长度的字符串
     */
    var zfc = {};
    zfc.getStringLength = function (str) {
      var len = str.length;
      var realLength = 0;
      for (var i = 0; i < len; i++) {
        if ((str.charCodeAt(i) & 0xff00) != 0) {
          realLength++;
        }
        realLength++;
      }
      return realLength;
    };
    console.log(zfc.getStringLength('aaa获取字符sfdsf串实际长度(包含中英文)sdfdsf'))
  </script>
</head>
<body>

</body>
</html>

方法三: 先把中文替换成两个字节的英文,再计算长度推荐使用

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <script>
    /**
     * 获取字符串实际长度(包含中英文)
     * @param str  要获得长度的字符串
     */
    var zfc = {};
    zfc.getStringLength = function (str) {
      return str.replace(/[\u0391-\uFFE5]/g, 'aa').length;
    };
    console.log(zfc.getStringLength('aaa获取字符sfdsf串实际长度(包含中英文)sdfdsf'))
  </script>
</head>
<body>

</body>
</html>

  

 

转载于:https://www.cnblogs.com/chenyablog/p/7883166.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 ASP.NET 中,字符串长度超过10字节截取以...代替并且注意中英文数字的区别,可以使用以下示例代码: ```csharp string str = "这是一个超过10字节的字符串,包括中文,English和1234数字。"; int length = 0; int byteLength = System.Text.Encoding.Default.GetBytes(str).Length; StringBuilder sb = new StringBuilder(); for (int i = 0; i < str.Length; i++) { char c = str[i]; if (c >= 0x4e00 && c <= 0x9fa5) // 判断是否为中文字符 { length += 2; } else if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) // 判断是否为英文字符 { length += 1; } else if (char.IsDigit(c)) // 判断是否为数字字符 { length += 1; } else // 其他字符按照中文处理 { length += 2; } if (length > 10 * 2) // 判断长度是否超过10字节 { sb.Append("..."); break; } sb.Append(c); } string result = sb.ToString(); Console.WriteLine(result); // 输出 "这是一个超过10字节的..." ``` 这里首先获取原始字符串的字节数,然后遍历字符串的每一个字符,根据字符的类型判断需要增加的长度。对于中文字符,增加 2;对于英文字符和数字字符,增加 1;对于其他字符,按照中文字符处理,增加 2。如果增加的长度超过了 10 字节,就在末尾添加省略号,并且跳出循环。最后输出截取后的字符串。 需要注意的是,这里的“字节”指的是字符串在内存中所占用的字节数,而不是字符串的字符数。中文字符在 UTF-8 编码方式下占用 3 个字节,在 GB2312 编码方式下占用 2 个字节。英文字符和数字字符在任何编码方式下都只占用 1 个字节。因此,需要根据实际情况选择适当的编码方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值