JS 按字符串长度切割字符串(支持汉字占2个长度)

按字符串长度切割字符串(支持汉字占2个长度)

/**
	 * 按字符串长度切割字符串(支持汉字占2个长度)
	 *
	 * @param src
	 * @param bytes
	 * @return
	 */
	chineseSplitFunction(src, bytes) {
		let that = this;
		if (src == null) {
			return null;
		}
		let splitList = [];
		let startIndex = 0; // 字符串截取起始位置
		let endIndex = bytes > src.length ? src.length : bytes; // 字符串截取结束位置
		while (startIndex < src.length) {
			let subString = src.substring(startIndex, endIndex);
			// 截取的字符串的字节长度大于需要截取的长度时,说明包含中文字符
			// 获取字符串的长度,如果有中文,则每个中文字符计为2位
			while (that.stringlenFunction(subString) > bytes) {
				--endIndex;
				subString = src.substring(startIndex, endIndex);
			}
			splitList.push(src.substring(startIndex, endIndex));
			startIndex = endIndex;
			// 判断结束位置时要与字符串长度比较(src.length),之前与字符串的bytes长度比较了,导致越界异常。
			endIndex = (startIndex + bytes) > src.length ? src.length : startIndex + bytes;
		}
		return splitList;
	}

获取字符串的长度,如果有中文,则每个中文字符计为2位

/**
	 * 获取字符串的长度,如果有中文,则每个中文字符计为2位
	 *
	 * @param value 指定的字符串
	 * @return 字符串的长度
	 */
	stringlenFunction: function (str) {
		var len = 0;
		for (var i = 0; i < str.length; i++) {
			var c = str.charCodeAt(i);
			//单字节加1   
			if ((c >= 0x0001 && c <= 0x007e) || (0xff60 <= c && c <= 0xff9f)) {
				len++;
			} else {
				len += 2;
			}
		}
		return len;
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值