中文编程入门(Lua5.4.6中文版)第七章 Lua 字符串与模式

在网游的符文之地中,我们可以通过神秘的"字符串法术"来处理和操作一系列字符。以下是如何在Lua的魔法卷轴上施展这种法术:

字符串的表示与召唤: 在Lua的魔法治则中,你可以运用三种方式召唤出一串字符(即字符串):

  1. 单引号(')内的字符序列。
  2. 双引号(")内的字符序列。
  3. \[ 和 ]之间的多行字符序列。

例如,在王者荣耀世界的符文中这样书写:

复制代码
符文1 = "网游"
输出("符文 1 是", 符文 1)
符文2 = '妲己'
输出("符文 2 是", 符文2)
符文3 = [[阿轲的秘籍]]
输出("符文 3 是", 符文3)

执行这段符文后将会显现:

符文 1 是 网游

符文 2 是 妲己

符文 3 是 阿轲的秘籍

转义字符的奥秘: 在特定情况下,你需要使用特殊的转义字符来代表无法直接书写的符文力量,如需在符文中包含双引号,可以使用 \" 。以下是部分转义字符及其对应含义:

转义字符 含义 ASCII码值(十进制)
\a 响铃(BEL) 007
\b 退格(BS) 008
\f 换页(FF) 012
\n 换行(LF) 010
\r 回车(CR) 013
\t 水平制表(HT) 009
\v 垂直制表(VT) 011
\ 反斜线字符 092
' 单引号字符 039
" 双引号字符 034
复制代码
输出("响铃(BEL)是看不见的\a")
输出("退格(BS)S".."\b".."B")        --用"\b"表示退格,可以往回吃掉S,再输出B,这就看见效果了.
输出("\f")                          --换页"\f",发现我们每执行一次就换了一页了吗?跟平常的执行不同吧.
输出("第一行".."\n".."第二行".."\r")       --换行"\n"执行了.
输出("第三行".."\n\r".."第四行")           --回车和换行是差不多的.在Windows下,\n表示换行,\r表示回车.
输出("水平制表符".."\t".."水平制表符")             --向右走了一列.
输出("垂直制表符".."\v".."垂直制表符")             --向下走了一行.
输出("\\")                           --反斜杠"\\"
输出("\'")                           --单引号"\'"   
输出("\"")                           --双引号"\"" 

响铃(BEL)是看不见的

退格(BS)B

第一行

第二行

第三行

第四行

水平制表符 水平制表符

垂直制表符

垂直制表符

\

'

"

符文操作的法术: Lua魔法还提供了丰富的字符串操作法术,如下所示:

序号 法术名 & 功能描述
1 string.upper(spell) - 将符文内容全部转化为大写字母
2 string.lower(spell) - 将符文内容全部转化为小写字母
3 string.gsub(spell, find, replace, num) - 替换符文中的部分内容
4 string.find(spell, substr, init\[, end]) - 在符文中查找指定子符文并返回位置
5 string.reverse(spell) - 反转符文的内容
6 string.format(...) - 格式化创建新的符文
7 string.char(...), string.byte(spell, int) - 字符与整数相互转换

例如,在王者世界中施放这些法术:

复制代码
-- 符文大小写转换
英雄角色 = "亚瑟王WoOw"
输出(字.大写(英雄角色))             -- 输出: 亚瑟王WOOW 英文大写
输出(字.小写(英雄角色))             -- 输出: 亚瑟王woow 英文小写

-- 符文查找与反转
符文 = "查找符文碎片"
查找结果 = 字.查找(符文, "符文")
倒序符文 = 字.倒序(符文)
再倒序 = 字.倒序(倒序符文)
输出(查找结果)                      -- 输出: 5 汉字每个字符的长度为2,所以5就是第3个汉字开始.
输出("反转后的符文是:", 倒序符文)   -- 输出: 樗奈艺椴, 乱码了,因为这里还没有深入将这个功能区分为汉字和英文的模式.以后有时间再研究.
输出("反转后的符文是:", 再倒序)     -- 输出: 查找符文碎片

-- 其他技能操作示例
连接技能 = "明世显" .. "牵" .. "大小姐"       -- 连接符文
英文长度 = 字.len("wang")                     -- 计算符文英文长度
中文长度 = 字.len("汪")                       -- 计算符文汉字长度
朵丽亚大招 = 字.rep("妲己,玩", 3)             -- 复制操作两次

输出(连接技能)                              -- 输出: 明世显牵大小姐
输出("符文长度为:", 英文长度, 中文长度)     -- 输出: 4,2 ,虽然单个汉字长度为2,但是英文一个词长度为4,为什么不用中文编程呢?
输出(朵丽亚大招)                            -- 输出: 妲己,玩妲己,玩妲己,玩
相关推荐
yaoxin52112317 小时前
434. Java 日期时间 API - Period 基于日期的时间段
java·开发语言·python
凡人叶枫18 小时前
Effective C++ 条款30:透彻了解 inlining 的里里外外
linux·开发语言·c++·嵌入式开发·effective c++
学逆向的18 小时前
C++纯虚函数
开发语言·c++·网络安全
程序员二叉19 小时前
【JUC】ThreadLocal底层原理|内存泄漏|弱引用|跨线程传递方案
java·开发语言·面试·职场和发展·juc
程序员二叉19 小时前
【JUC】线程池全套深度详解|参数|流程|拒绝策略|调优|异常处理
java·开发语言·jvm·算法·面试·juc
凡人叶枫19 小时前
Effective C++ 条款22:将成员变量声明为 private
linux·开发语言·c++
Qt程序员19 小时前
掌握 Linux 内核调度:从原理到实现(进程篇)
java·开发语言
code bean19 小时前
【LangChain】检索器完全指南:从向量检索到生产级 RAG 架构
java·开发语言·微服务
LabVIEW开发20 小时前
LabVIEW + MATLAB 混合编程:爆炸场测试数据精准采集方案
开发语言·matlab·labview
嵌入式协会202407220 小时前
(已解决)MinIO python 获取预签名出现forbidden、errornetwork等错误
java·开发语言·python