Lua语言之字符串

一:字符串的三种表示形式:
1.双引号: “Lua”
2.单引号: ‘Lua’
3.两个中括号: [[Lua]]
*:单引号与双引号效果几乎一样,而中括号所包裹的字符串可以实现原格式输出。
这里写图片描述

二:字符串相连: 用 .. 连接字符串

三:字符串操作:
1.字母大小写转换
string.upper( 字符串变量)
string.lower( 字符串变量)
2.字符串反转
string.reverse( 字符串变量):将字符串进行位置反转
3.字符串长度
string.len( 字符串变量):返回字符串的长度
*:单个字母、数字、符号长度都为1;单个汉字长度为2
4.字符串替换
string.gsub( 原始字符串, 旧字符串, 新字符串, [替换次数])
*:在原始字符串中查找旧字符串,如果找到,则用新字符串将其替换
*:替换次数可以不写,若不写,即表示全部替换

四:字符串格式化
string.format( 字符串格式, 变量1, 变量2, 变量N);
可以对字符串进行格式化,将字符串设定成指定的格式
*: %s —— 字符串(可以接收任何类型数据) %d —— 整数 %f —— 小数
*: %0.1f,即保留1位小数,%0.2f即保留两位小数

这里写图片描述

这里写图片描述

### 如何在 Lua 中获取字符串长度 在 Lua 中,可以通过多种方式实现字符串长度的计算。以下是几种常见的方法及其具体实现: #### 方法一:使用 `#` 运算符 最简单的方式是利用 Lua 提供的内置运算符 `#` 来获取字符串的字节数量。这种方法适用于仅由 ASCII 字符组成的字符串。 ```lua local str = "hello" print(#str) -- 输出 5 ``` 对于 UTF-8 编码的字符串(如包含中文字符),该方法返回的是字符串的实际字节数而非逻辑字符数量[^1]。 --- #### 方法二:手动解析 UTF-8 字符串 为了支持多字节字符(如中文或其他 Unicode 字符),可以编写一个函数来逐一解析每个字符并统计实际的字符个数。以下是一个示例实现: ```lua function getUtf8StringLength(inputstr) if not inputstr or type(inputstr) ~= "string" or #inputstr <= 0 then return nil end local length = 0 local i = 1 while i <= #inputstr do local curByte = string.byte(inputstr, i) local byteCount = 1 if curByte >= 240 and curByte <= 247 then byteCount = 4 -- 4字节字符 elseif curByte >= 224 and curByte <= 239 then byteCount = 3 -- 汉字 elseif curByte >= 192 and curByte <= 223 then byteCount = 2 -- 双字节字符 else byteCount = 1 -- 单字节字符 end i = i + byteCount length = length + 1 end return length end local utf8Str = "你好,world!" print(getUtf8StringLength(utf8Str)) -- 输出 9 ``` 此方法能够正确处理 UTF-8 编码下的多字节字符[^3]。 --- #### 方法三:基于正则表达式的解决方案 另一种高效的方法是借助 Lua 的模式匹配功能。通过定义合适的模式,可以直接计算出字符串中的有效字符数目。 ```lua function getCharLength(str) local bytes = {str:byte(1, #str)} local length, begin = 0, false for _, byte in ipairs(bytes) do if byte < 128 or byte >= 192 then begin = false length = length + 1 elseif not begin then begin = true length = length + 1 end end return length end local mixedStr = "A测试B" print(getCharLength(mixedStr)) -- 输出 4 ``` 这种方式特别适合于混合了英文字母和非 ASCII 字符的情况[^4]。 --- #### 总结 以上三种方法各有优劣: - **方法一**最为简洁快速,但不适用于含有非 ASCII 字符的场景。 - **方法二**灵活性高,能精确识别各种类型的 UTF-8 字符。 - **方法三**依赖模式匹配机制,在某些特定场合下可能更加直观易懂。 开发者应根据实际需求选择合适的技术路线。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值