Lua字符串基础

Lua中的字符串是不可变序列,可以包含任意字节数据(包括嵌入的\0)。字符串可以用单引号、双引号或长括号([[ ]])定义:

str1 = "Hello"
str2 = 'World'
str3 = [[Multi-line
string]]

字符串连接

使用..操作符连接字符串:

msg = "Hello" .. " " .. "World"  -- "Hello World"

字符串长度

通过#操作符获取字符串长度:

len = #"Lua"  -- 3

字符串常用方法

Lua标准库提供字符串处理函数(通过string模块):

-- 大小写转换
string.upper("hello")  -- "HELLO"
string.lower("WORLD")  -- "world"-- 查找子串
string.find("Lua is great", "is")  -- 5, 6-- 截取子串
string.sub("Lua", 2, 3)  -- "ua"-- 格式化输出
string.format("Pi: %.2f", math.pi)  -- "Pi: 3.14"--反转
reversedString = string.reverse(string)
print("新字符串为",reversedString)--替换
string.gsub("aaaa","a","z",3);    --zzza    3--类型转换(char 将整型数字转成字符并连接, byte 转换字符为整数值(可以指定某个字符,默认第一个字符))
string.char(97,98,99,100)    --abcd
string.byte("ABCD",4)    --68
string.byte("ABCD")    --65--计算字符串长度
string.len("abc")    --3--字符串n个copy
> string.rep("abcd",2)    --abcdabcd

模式匹配

Lua使用轻量级模式匹配(非正则表达式):

-- 匹配数字
for num in string.gmatch("a1b22c", "%d+") doprint(num)  -- 输出1和22
end-- 替换
string.gsub("hello world", "world", "Lua")  -- "hello Lua"

字符串转义字符

常见转义序列:

  • \n 换行
  • \t 制表符
  • \\ 反斜杠
  • \" 双引号
  • \' 单引号

字符串与数值转换

num = tonumber("123")  -- 字符串转数字
str = tostring(123)    -- 数字转字符串

字符串缓冲区

处理大量字符串拼接时,使用table.concat更高效:

local parts = {}
for i = 1, 100 doparts[i] = "line" .. i
end
local result = table.concat(parts, "\n")

Unicode处理

Lua 5.3+支持UTF-8库:

utf8.len("中文")  -- 返回2
utf8.offset("a中文b", 3)  -- 返回第3个字符的位置

字符串与表

可以通过string.charstring.byte处理ASCII值:

string.byte("A")  -- 65
string.char(65)   -- "A"

附:(格式字符串转义码)

  

  • %c - 接受一个数字, 并将其转化为ASCII码表中对应的字符
  • %d, %i - 接受一个数字并将其转化为有符号的整数格式
  • %o - 接受一个数字并将其转化为八进制数格式
  • %u - 接受一个数字并将其转化为无符号整数格式
  • %x - 接受一个数字并将其转化为十六进制数格式, 使用小写字母
  • %X - 接受一个数字并将其转化为十六进制数格式, 使用大写字母
  • %e - 接受一个数字并将其转化为科学记数法格式, 使用小写字母e
  • %E - 接受一个数字并将其转化为科学记数法格式, 使用大写字母E
  • %f - 接受一个数字并将其转化为浮点数格式
  • %g(%G) - 接受一个数字并将其转化为%e(%E, 对应%G)及%f中较短的一种格式
  • %q - 接受一个字符串并将其转化为可安全被Lua编译器读入的格式
  • %s - 接受一个字符串并按照给定的参数格式化该字符串

为进一步细化格式, 可以在%号后添加参数. 参数将以如下的顺序读入:

  • (1) 符号: 一个+号表示其后的数字转义符将让正数显示正号. 默认情况下只有负数显示符号.
  • (2) 占位符: 一个0, 在后面指定了字串宽度时占位用. 不填时的默认占位符是空格.
  • (3) 对齐标识: 在指定了字串宽度时, 默认为右对齐, 增加-号可以改为左对齐.
  • (4) 宽度数值
  • (5) 小数位数/字串裁切: 在宽度数值后增加的小数部分n, 若后接f(浮点数转义符, 如%6.3f)则设定该浮点数的小数只保留n位, 若后接s(字符串转义符, 如%5.3s)则设定该字符串只显示前n位.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/93024.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/93024.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/93024.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大模型蒸馏(distillation)---从DeepseekR1-1.5B到Qwen-2.5-1.5B蒸馏

目录 1.1 蒸馏目标 2 环境准备 2.1依赖库安装 2.2 硬件要求 2.3 模型与数据集下载 2.3.1 教师模型下载 2.3.2 学生模型下载 2.3.3 数据集准备或下载 3.过程日志 4. 模型加载与配置 4.1 加载教师模型 4.2 加载学生模型 4.3 数据预处理函数 4.4 数据收集器 4.5 定义…

通过redis_exporter监控redis cluster

环境说明: 现在有一套redis cluster,部署是3主机6实例架构部署。需要采集对应的指标,满足异常监控告警,性能分析所需。 环境准备 以下环境需要提前部署完成。 redis cluser prometheus alertmanager grafna redis_exporter部署 我…

第二十天(正则表达式与功能实际运用)

在程序员一生的工作中,遇到的最多的数据就是字符串字符串里面很有可能有很多的不需要的信息我们需要从中间挑选出我们需要的如果循环去写,比较简单的时候问题不大规则多了,你的工作量会成倍上升的为了解决这个问题 ---- 正则表达式正则表达式…

0基础法考随手笔记 03(刑诉05 刑事证据与证明+06 强制措施)

1.如何区分书证和电子数据 书面材料是否为书证?→ 看内容是否直接源于案件事实(不是 “记录别人陈述” 的载体)。 证据清单是否为证据?→ 看谁做的清单(侦查人员做的勘查笔录是证据,当事人做的目录不是&…

资产负债表及其数据获取

文章目录资产负债表及其数据获取资产负债表资产负债表在股票投资中的意义AKShare中的资产负债表数据接口(深沪为例)接口描述调用示例总结资产负债表及其数据获取 资产负债表 资产负债表(Balance Sheet)是反映企业在某一特定日期财…

数据仓库深度探索系列 | 开篇:开启数仓建设新征程

数据仓库深度探索系列 | 开篇:开启数仓建设新征程 在当今信息技术飞速发展的背景下,企业面临着数据量的爆炸式增长。企业不仅要高效管理海量数据,还需从中提取关键信息以支持复杂决策。数据仓库已从单纯的数据存储工具,演变为支持…

Linux如何执行系统调用及高效执行系统调用:深入浅出的解析

文章目录如何执行系统调用及高效执行系统调用:深入浅出的解析一、什么是系统调用?1.1 系统调用的作用1.2 系统调用的分类二、如何执行系统调用?2.1 系统调用的触发2.2 库函数与系统调用的关系2.3 系统调用的示例2.4 错误处理三、如何高效执行…

基于 XGBoost 与 SHAP 的医疗自动化办公与可视化系统(上)

摘要 随着信息技术的飞速发展和医疗健康数据的爆炸式增长,现代医疗机构面临着日益复杂的数据处理挑战。医生和行政人员常常需要花费大量时间在数据提取、整理、分析和报告生成等重复性、事务性的工作上,这不仅降低了工作效率,也限制了医护人员将更多精力投入到直接的患者护…

基于Kafka实现简单的延时队列

生命无罪,健康万岁,我是laity。 我曾七次鄙视自己的灵魂: 第一次,当它本可进取时,却故作谦卑; 第二次,当它在空虚时,用爱欲来填充; 第三次,在困难和容易之间&…

OceanBase 4.3.5 解析:DDL性能诊断

背景DDL操作通常耗时较长,特别是涉及补数据流程的DDL语句。在执行过程中,用户面临两个主要痛点:一是无法实时获取DDL执行进度,难以区分长时间运行是正常现象还是由内部异常导致的停滞;二是执行效率经常低于预期&#x…

幸福网咖订座点餐小程序的设计与实现

文章目录前言详细视频演示具体实现截图后端框架SpringBoot微信小程序持久层框架MyBaits成功系统案例:参考代码数据库源码获取前言 博主介绍:CSDN特邀作者、985高校计算机专业毕业、现任某互联网大厂高级全栈开发工程师、Gitee/掘金/华为云/阿里云/GitHub等平台持续…

C语言————练习题册(答案版)

目录 每日更新5-10题,感兴趣可以订阅 一.理解函数、操作符、占位符 1.1 欢迎来到C语言的世界 1.2 输入和输出 1.3 浮点数的打印 1.4 字符串的打印 1.14 I am iron man 1.5 求和运算 1.6 计算比例 1.7 求商求余 1.8 不同数位上的数字 1.8.1 求个位数 1.8…

haproxy配置详解

1、haproxy简介 HAProxy是法国开发者 威利塔罗(Willy Tarreau) 在2000年使用C语言开发的一个开源软件 是一款具备高并发(万级以上)、高性能的TCP和HTTP负载均衡器 支持基于cookie的持久性,自动故障切换,支持正则表达式及web状态统计 企业版网站&#xff…

计网-TCP可靠传输

TCP(传输控制协议)的可靠传输是通过一系列机制保证数据准确、有序、不丢失地到达接收方。以下是TCP可靠传输的详细过程及核心机制:1. 数据分块与序列号(Seq)分块:应用层数据被分割成适合传输的TCP报文段&am…

数智管理学(三十九)

第三章 数智化对管理理论的冲击第三节 系统理论与生态化管理的强化系统理论作为理解企业运作与环境互动的重要框架,一直强调企业是一个由多个相互关联子系统构成的整体,其核心要素包括整体性、开放性、动态性和反馈机制。在传统管理视角下,这…

哈希表(c语言)

文章目录哈希表哈希表知识点哈希表概念负载因子哈希表的优缺点哈希冲突哈希函数常见哈希函数处理哈希冲突开放定址法线性探测二次探测链地址法哈希表的实现哈希表的核心:HashMap核心函数:从创建到销毁创建哈希表:hashmap_create()销毁哈希表:hashmap_des…

【Canvas与旗帜】条纹版大明三辰旗

【成图】【代码】<!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>十三条纹版大明三辰旗 Draft1</title><style type"text/…

【Java】空指针(NullPointerException)异常深度攻坚:从底层原理到架构级防御,老司机的实战经验

写Java代码这些年&#xff0c;空指针异常&#xff08;NullPointerException&#xff09;就像甩不掉的影子。线上排查问题时&#xff0c;十次有八次最后定位到的都是某个对象没处理好null值。但多数人解决问题只停留在加个if (obj ! null)的层面&#xff0c;没从根本上想过为什么…

【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 主页-评论用户时间占比环形饼状图实现

大家好&#xff0c;我是java1234_小锋老师&#xff0c;最近写了一套【NLP舆情分析】基于python微博舆情分析可视化系统(flaskpandasecharts)视频教程&#xff0c;持续更新中&#xff0c;计划月底更新完&#xff0c;感谢支持。今天讲解主页-评论用户时间占比环形饼状图实现 视频…

Redis面试精讲 Day 5:Redis内存管理与过期策略

【Redis面试精讲 Day 5】Redis内存管理与过期策略 开篇 欢迎来到"Redis面试精讲"系列的第5天&#xff01;今天我们将深入探讨Redis内存管理与过期策略&#xff0c;这是面试中经常被问及的核心知识点。对于后端工程师而言&#xff0c;理解Redis如何高效管理内存、处…