在Lua中计算含中文的字符串的长度

 1 --[[
 2     @desc: 计算字符串字符个数
 3     author:{author}
 4     time:2017-12-29 16:08:11
 5     --@inputstr: 源字符串
 6     return 字符个数
 7 ]]
 8 function getStringCharCount(str)
 9     local lenInByte = #str
10     local charCount = 0
11     local i = 1
12     while (i <= lenInByte)
13     do
14         local curByte = string.byte(str, i)
15         local byteCount = 1;
16         if curByte > 0 and curByte <= 127 then
17             byteCount = 1                                               --1字节字符
18         elseif curByte >= 192 and curByte < 223 then
19             byteCount = 2                                               --双字节字符
20         elseif curByte >= 224 and curByte < 239 then
21             byteCount = 3                                               --汉字
22         elseif curByte >= 240 and curByte <= 247 then
23             byteCount = 4                                               --4字节字符
24         end
25
26         local char = string.sub(str, i, i + byteCount - 1)
27         i = i + byteCount                                               -- 重置下一字节的索引
28         charCount = charCount + 1                                       -- 字符的个数(长度)
29     end
30     return charCount
31 end

原文地址:https://www.cnblogs.com/AaronBlogs/p/8145963.html

时间: 2024-08-13 23:47:09

在Lua中计算含中文的字符串的长度的相关文章

JavaSE8基础 String getBytes 将不含中文的字符串转换成字节数组

os :windows7 x64    jdk:jdk-8u131-windows-x64    ide:Eclipse Oxygen Release (4.7.0)        code: package jizuiku.t01; import java.nio.charset.Charset; public class Demo01 { public static void main(String[] args) { String str = "[email protected]#$&qu

java 判断含有中文的字符串的长度

public static boolean isLetter(char c) { int k = 0x80; return c / k == 0 ? true : false; } /** * 判断字符串是否为空 * @param str * @return */ public static boolean isNull(String str){ if(str==null||str.trim().equals("")||str.trim().equalsIgnoreCase("

hdu3068 求一个字符串中最长回文字符串的长度 Manacher算法

最长回文 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 31611    Accepted Submission(s): 11618 Problem Description 给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度.回文就是正反读都是一样的字符串,如aba, abba等 Input 输入有多组

每日分享!~ vue JavaScript中为什么可以读取到字符串的长度!(包装对象)

首先需要知道什么是包装对象? 对象是JavaScript语言下最主要的数据类型,三种原始的值-----数值,字符串,布尔值,在一定条件下会自动的转为对象.也就是原始类型的包装对象: 也就是通过如下方式: Var v1 = new Number(123). // 检测v1 的数据类型,发现v1 竟然是object    ,当然包装对象和原始数据类型不再相等. 总结: 这三个原始的数据类型通过构造函数使用new时,可以将原始类型的值转换成对象.作为普通函数使用的时候,可以将任意类型的值,转为原始的值

MySql查询某字段中是否含中文

使用length与char_length两个函数 length:是计算字段的长度一个汉字是算三个字符,一个数字或字母算一个字符 char_length:不管汉字还是数字或者是字母都算是一个字符 对同一字段分别使用length.char_length计算长度,并进行比较长度相同则字段中无汉字,不相同则肯定有汉字 SELECT * FROM nt_users t WHERE LENGTH( REPLACE ( REPLACE (t.LOGIN_NAME, '-', ''), '+', '' )) =

对jsp中Url含中文字符的编码处理

有一段url="/app/index/index.jsp?userName='测试'":在传入到jsp页面后. 用 <%  String userName=request.getParameter("userName"); %> 还是用(struts spring jquery 环境下)  ${param.userName},获取得到都是中文乱码了.所以需要对url进行先编码后再使用.如JS处理: var re = new RegExp('[\u4e00

jni中字符转换中文乱码的处理方法

转自:http://blog.sina.com.cn/fangaosjtu 这两天在学习使用jni,在java程序中,调用海量词典的dll.利用jni的GetStringChars函数和NewString函数时,遇到了中文乱码的问题,折腾了一个晚上.查阅了一些资料,总结如下: 一.相关概念 java内部是使用16bit的unicode编码(UTF-16)来表示字符串的,无论中文英文都是2字节: jni内部是使用UTF-8编码来表示字符串的,UTF-8是变长编码的unicode,一般ascii字符

剖析ifstream打开含中文路径名文件失败的原因

http://blog.csdn.net/yukin_xue/article/details/7543423 最近写程序的时候遇到了使用ifstream打开含中文路径文件时失败的问题,在网上翻了一下,发现这是一个普遍遇到的问题,在很多人的博文中也都给出了一些解决技巧,但大多是转载的东西,很少对这个问题引发的原因有一个清晰.全面的解释.因此,我觉得有必要对该问题引发的原因作一个详细的剖析,希望对遇到同样问题的朋友们能有所帮助. 首先,用一个简单的例子来重现一下我所遇到的问题: (1)在VS2008

C#中如何正确的操作字符串?

字符串应该是所有编程语言中使用最频繁的一种基础数据类型.如果使用不慎,我们就会为一次字符串的操作所带来的额外性能开销而付出代价.本条建议将从两个方面来探讨如何规避这类性能开销: 1. 确保尽量少的装箱 2. 避免分配额外的内存空间. 第一个方面:确保尽量少的装箱 对于装拆箱,我们应该不陌生,值类型转换成引用类型即为装箱, 引用类型转换成值类型即为拆箱. 在自己编写的代码中,应当尽可能的避免编写不必要的装箱代码.装箱之所以会带来性能损耗,因为它需要完成下面三个步骤: • 首先,会为值类型在托管堆中