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.寫好算法以后,我們只需傳入不同的字符串,得到不同的表,進行比較就可以了:
我們只比較兩個字符串都含有中文的情況
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的lua 区间比较_Lua(模糊查找):判断两个字符串(含中文)是否存在至少一个相同的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用pm2启动node文件_使用 PM2
- 下一篇: shiro将session认证改成tok