用过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(模糊查找):判断两个字符串(含中文)是否存在至少一个相同相关推荐

  1. python中如何判断两个字符串是否相等_python怎样判断两个字符串是否相同

    原标题:python怎样判断两个字符串是否相同 python中,判断两个字符串是否相等或一样,可以使用==或者is来判断:判断不一样可以使用 is not. 示例 使用注意事项 1.有时候两个字符串打 ...

  2. 判断两个字符串是否是变形词

    问题: 给定两个字符串str1和str2,如果str1和str2中出现的字符种类一样并且每种字符出现的次数也一样,那么str1与str2互为变形词.请实现函数判断两个字符串是否互为变形词. 举例: s ...

  3. 算法2:判断两个字符串内容是否相同

    详细描述 判断两个字符串的内容是否相同,指的是两个字符串中的字符是否完全一样,顺序可以不同(也可以称之为换位字符串).比如字符串1为"abc",字符串2为"cba&quo ...

  4. java匹配两个字符_·代表任意一个字符,*代表任意一串字符,判断两个字符串是否匹配?...

    ·代表任意一个字符,*代表任意一串字符,判断两个字符串是否匹配? 如题,·代表任意一个字符,*代表任意一串字符,判断两个字符串是否匹配?假如a字符串为:as*bnc·b,b字符串为asdfgvbbnc ...

  5. 判断两个字符串是否由相同的字符组成

    描述 判断两个字符串是否由相同的字符组成 分析 方法一,排序法.对两个字符串进行排序,然后在比较. 方法二,空间换时间.ascII字符共256个,对字符串1出现的字符在对应的数组里加1,对字符串1出现 ...

  6. c++如何判断两个字符串是否相同?_链表 | 如何判断两个单链表(无环)是否交叉...

    如何判断两个单链表(无环)是否交叉 单链表相交指的是两个链表存在完全重合的部分,如下图所示 在上图中,这两个链表相交于结点5,要求判断两个链表是否相交,如果相交,找出相交处的结点. 分析 Hash法 ...

  7. Python中判断两个字符串的内容是否相同

    1 前言 今天在划分数据集的时候,需要判断两个字符串的内容是否相同,这个之前查过,不过好像忘记了,所以想着再记录一下- 2 Python中判断两个字符串的内容是否相同 使用"==" ...

  8. java中怎么判断字符相等_Java中如何判断两个字符串相等

    如何判断两个字符串相等 Java 中可以有两种方法来做这个事,== 运算符 与 equals 方法.但是这两者又有什么区别? 先来看一段示例代码: String a1 = "abc" ...

  9. 浙大python判断两个字符串是否为变位词_算法2----------变位词

    1.背景: 变位词指的是一个单词可以通过改变其他单词中字母的顺序来得到,也叫做兄弟单词,如army->mary. 题1:判断两个字符串s1和s2是否为变位词. 经典的字符串变位词检测问题是比较不 ...

最新文章

  1. Java 如何实现二维码?
  2. 【错误记录】Android NDK 编译报错 ( no known conversion from ‘unsigned char *‘ to ‘const char *‘ )
  3. [html] Google map的地理编码javascript例子 -- Google map geocoder example
  4. DualLinkList
  5. php 5.5 xhprof for windows
  6. 深入浅出Zookeeper(一) Zookeeper架构及FastLeaderElection机制
  7. Python Django 初试手记
  8. Microsoft Access 2002中文版标准培训教程pdf
  9. 未来十年计算机语言,随便聊聊中国未来十年热门的十大编程语言使用趋势
  10. 买台式计算机看属性,电脑配置怎么看,教您怎么查看电脑配置
  11. 用JS写了一个30分钟倒计时器
  12. Collected errors: * check_data_file_clashes: Package libustream-openssl wants to install file /home/
  13. Data too long for column ‘xxxx‘ at row 1 解决办法
  14. Elasticsearch7.12常用操作总结
  15. android 屏蔽系统输入法自定义输入法的详解
  16. 免费的mysql云平台_免费的mysql云服务器
  17. 火狐的调试利器-----Firebug
  18. Hyper-V虚拟机安装XP系统
  19. 阿里电话面试之所做所得所感(2015年7月)
  20. wordcloud制作词云图

热门文章

  1. 利用TinyXML读取VOC2012数据集的XML标注文件裁剪出所有人体目标保存为文件
  2. 用git rebase合并
  3. RPC框架几行代码就够了
  4. elasticsearch 第二篇(配置篇)
  5. 深度学习(七)caffe源码c++学习笔记
  6. 【OpenCV3】RGB图像向CMYK颜色空间转换
  7. 入坑emacs之配置文件 .emas.d/init.el -v1.0
  8. 技术面试老是有劲使不出,该怎么办?
  9. java数据类型,取值范围,引用类型解析
  10. 工作总结-基于R的数据分析