lua 区间比较_Lua(模糊查找):判断两个字符串(含中文)是否存在至少一个相同
用过Lua的,应该知道lua有一个截取字符串的接口,string.sub(s,i,j),就是截取字符串s,从第i个字符到第j个字符的字串,这里的一个字符是一个字节,对于英文字母还是阿拉伯数学,不管是utf8编码,还是ansi(GBK)编码,都是一样的,而且对于汉字,前者占3个字节,后者占2个字节,当然还有4个字节的汉字,那如何从一个字符串比如"bg%好-+03打@/f"中准确截取出我们需要的汉字呢,这就是我们今天需要解决的问题.
其实,在今天之前,我也不知道怎么做,我是因为要解决一个模糊查找的需求来学习到了这些
首先当前游戏代码是以utf8编码格式,因为我们要面向中国玩家,而且很多英语不是非常好,哈哈,所以全写英文的,玩家就看不懂了,如果ui显示文字全是英文,下面的就不需要看了
1.字符是由几个字节组成:(16进制)
[0, 0xc0) 表示这个字符仅由1个字节构成 [0,192)
[0xc0, 0xe0) 表示这个字符由2个字节构成 [192,225)
[0xe0, 0xf0) 表示这个字符由3个字节构成 [225,240)
[0xf0, 0xff) 表示这个字符由4个字节构成 [240,255)
2.如何取得字节ASCII码 :
string.byte(s,i) 或 s:byte(i)
3.我们先写一个判断utf8字符byte长度的函数:
4.在Lua中,表(table)是十分重要的一种数据结构,实际上Lua对于复杂数据类型也仅提供了表给我们,我们通过表可以实现我们需要的大部分重要的数据结构,比如数组。我们现在只需要知道有没有相同的中文字符,其他不关心,所以把字符串变成数据中文字符串的表就好了
我们传入两个参数,一个是字符串,一个是用来装汉字的表
通常来说,汉字范围从0x4E00到0x9FA5,转换为UTF-8编码为11100100 10111000 10000000(228, 184, 128) 到 11101001 10111110 10100101(233, 190, 165)
因此,中文UTF-8编码用3个字节表示,要遵守格式:1110xxxx 10xxxxxx 10xxxxxx
即第一个字节的取值区间为 [11100000, 11110000) = [0xe0, 0xf0) = [224, 240) 左开右闭
后两个字节的取值区间为[10000000, 10111111] = [0x80,0xbf] = [128, 191] 开区间
所以我们可以一个字节的去截取,然后计算出byte长度,如果大于3,就截取存入表中
5.写好算法以后,我们只需传入不同的字符串,得到不同的表,进行比较就可以了:
我们只比较两个字符串都含有中文的情况
lua 区间比较_Lua(模糊查找):判断两个字符串(含中文)是否存在至少一个相同相关推荐
- python中如何判断两个字符串是否相等_python怎样判断两个字符串是否相同
原标题:python怎样判断两个字符串是否相同 python中,判断两个字符串是否相等或一样,可以使用==或者is来判断:判断不一样可以使用 is not. 示例 使用注意事项 1.有时候两个字符串打 ...
- 判断两个字符串是否是变形词
问题: 给定两个字符串str1和str2,如果str1和str2中出现的字符种类一样并且每种字符出现的次数也一样,那么str1与str2互为变形词.请实现函数判断两个字符串是否互为变形词. 举例: s ...
- 算法2:判断两个字符串内容是否相同
详细描述 判断两个字符串的内容是否相同,指的是两个字符串中的字符是否完全一样,顺序可以不同(也可以称之为换位字符串).比如字符串1为"abc",字符串2为"cba&quo ...
- java匹配两个字符_·代表任意一个字符,*代表任意一串字符,判断两个字符串是否匹配?...
·代表任意一个字符,*代表任意一串字符,判断两个字符串是否匹配? 如题,·代表任意一个字符,*代表任意一串字符,判断两个字符串是否匹配?假如a字符串为:as*bnc·b,b字符串为asdfgvbbnc ...
- 判断两个字符串是否由相同的字符组成
描述 判断两个字符串是否由相同的字符组成 分析 方法一,排序法.对两个字符串进行排序,然后在比较. 方法二,空间换时间.ascII字符共256个,对字符串1出现的字符在对应的数组里加1,对字符串1出现 ...
- c++如何判断两个字符串是否相同?_链表 | 如何判断两个单链表(无环)是否交叉...
如何判断两个单链表(无环)是否交叉 单链表相交指的是两个链表存在完全重合的部分,如下图所示 在上图中,这两个链表相交于结点5,要求判断两个链表是否相交,如果相交,找出相交处的结点. 分析 Hash法 ...
- Python中判断两个字符串的内容是否相同
1 前言 今天在划分数据集的时候,需要判断两个字符串的内容是否相同,这个之前查过,不过好像忘记了,所以想着再记录一下- 2 Python中判断两个字符串的内容是否相同 使用"==" ...
- java中怎么判断字符相等_Java中如何判断两个字符串相等
如何判断两个字符串相等 Java 中可以有两种方法来做这个事,== 运算符 与 equals 方法.但是这两者又有什么区别? 先来看一段示例代码: String a1 = "abc" ...
- 浙大python判断两个字符串是否为变位词_算法2----------变位词
1.背景: 变位词指的是一个单词可以通过改变其他单词中字母的顺序来得到,也叫做兄弟单词,如army->mary. 题1:判断两个字符串s1和s2是否为变位词. 经典的字符串变位词检测问题是比较不 ...
最新文章
- Java 如何实现二维码?
- 【错误记录】Android NDK 编译报错 ( no known conversion from ‘unsigned char *‘ to ‘const char *‘ )
- [html] Google map的地理编码javascript例子 -- Google map geocoder example
- DualLinkList
- php 5.5 xhprof for windows
- 深入浅出Zookeeper(一) Zookeeper架构及FastLeaderElection机制
- Python Django 初试手记
- Microsoft Access 2002中文版标准培训教程pdf
- 未来十年计算机语言,随便聊聊中国未来十年热门的十大编程语言使用趋势
- 买台式计算机看属性,电脑配置怎么看,教您怎么查看电脑配置
- 用JS写了一个30分钟倒计时器
- Collected errors: * check_data_file_clashes: Package libustream-openssl wants to install file /home/
- Data too long for column ‘xxxx‘ at row 1 解决办法
- Elasticsearch7.12常用操作总结
- android 屏蔽系统输入法自定义输入法的详解
- 免费的mysql云平台_免费的mysql云服务器
- 火狐的调试利器-----Firebug
- Hyper-V虚拟机安装XP系统
- 阿里电话面试之所做所得所感(2015年7月)
- wordcloud制作词云图