Lua 字符串操作

1、获取字符串长度

--获取字符串长度
s='abcd'
d="杭州"
--一个汉字占3个长度
--一个英文字符占1个长度
print(#s)
print(#d)

在这里插入图片描述

2、转义字符

--lua支持转义字符
--实现多行打印
print('小妹妹\n好漂亮')

在这里插入图片描述
实现多行打印还可以使用

s=[[
我们是
穿梭在
银河
的
火箭队
喵
]]
print(s)

在这里插入图片描述

3、字符串拼接

1、第一种
不管啥类型用都可以拼在一起

--字符串拼接通过..
s1 = 123
s2 = '666'
print(s1..s2)

在这里插入图片描述
2、第二种
采用转义字符来拼接

%d:与数字拼接

print(string.format('老铁%d',666))

在这里插入图片描述

%s:与字符配对
在这里插入图片描述
详细的可以看看https://www.runoob.com/lua/lua-strings.html

4、字符串转换

在这里插入图片描述
当然,如果我们单纯打印的话,没必要用到tostring(),这是用在我们编程的还时候需要显式转换的时候

5、Lua 常用支持字符串的操作

str="abCdeFG"
str2 = "长zh1"

--大写转小写
print(string.lower(str)) -------abcdefg

--小写转大写
print(string.upper(str)) -------ABCDEFG

--翻转字符串
print(string.reverse(str)) ----------GFedCba

--字符串索引(返回两个值,一个是起始位置,一个是结束位置(你看我找一个它也是返回3,3))
print(string.find(str,"Cd")) --------3	4
print(string.find(str,'C'))  --------3	3

--截取字符串(它这边有个重载,如果只传入一个数值的话,默认输出这这个数值到结尾的字符串。如果两个数值,取这个两个数值的中间字符串)
print(string.sub(str,3))  --------CdeFG
print(string.sub(str,3,5)) -------Cde
print(string.sub(str2,3)) -----如果含有中文字符就不能使用sub进行截取,否则会产生乱码

--字符串修改
print(string.rep(str,2))   -------abCdeFGabCdeFG

--字符串修改
print(string.gsub(str,"Cd",'WW')) -------abWWeFG	1

--返回字符串的内部数字编码ascii码
	--string.byte (s [, i [, j]])    中括号代表可选的参数   可以这样调用:string.byte("abc"),也可以这样调用:string.byte("abc",1),当然也可以这样调用:string.byte ("abc",1,-1);)
	--返回字符串的内部数字编码,i、j为字符串的索引,i、j限定了多少字符就返回多少值。
local k1 = string.byte(str)   
print(k1)	-----97

local k2 = string.byte(str,1) 
print(k2) -----97

local k3 = string.byte(str,2) 
print(k3) -----98

local k4,k5,k6= string.byte(str,1,3)
print(k4,k5,k6) ----97 98 67

--string.char (···)
	--跟byte()相反,把数字编码转换为字符串
s = string.char(97,98,99)
print(s)            --abc

n = string.char()
print(n)            --什么都没输出
print(type(n))        --string
print(string.byte("hello",1,-1)) -- 104	101	108	108	111
print(string.char(string.byte("hello",1,-1)))    --hello


--string.dump (function [, strip])
	-- 这个函数是用来序列化函数的。传入一个函数,返回一个字符串。通过load该字符串可以反序列化该函数。
--序列化
	--序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。
	function max( a,b )
	    return a>b and a or b
	end
	--将函数序列化
	local func_content = string.dump(max)
	print(func_content)
	print(type(func_content))  --string

--string.format (formatstring, ···)
	--这个函数用来格式化字符串。API文档很复杂,用法很多
	--我们知道lua中可以用".."连接字符串,可以起到一部分格式化字符串的作用
	--但是如果字符串较长或者有特殊的格式转换操作(如十六进制转换),用".."就会很繁琐且可读性差。用string.format()就是一个很好的解决方案。
	
-- 	
格式控制符以%开头,常用的有以下几种

-- %a: 表示任何字母。
-- %c: 表示任何控制字符。
-- %d: 表示任何数字。
-- %g: 表示任何除空白符外的可打印字符。
-- %l: 表示所有小写字母。
-- %p: 表示所有标点符号。
-- %s: 表示所有空白字符。
-- %u: 表示所有大写字母。
-- %w: 表示所有字母及数字。
-- %x: 表示所有 16 进制数字符号。
--  (这里的 x 是任意非字母或数字的字符) 表示字符 x。 这是对魔法字符转义的标准方法。 所有非字母或数字的字符 (包括所有标点,也包括非魔法字符) 都可以用前置一个 '%' 放在模式串中表示自身。	

	print(string.format("屠龙大宝刀%d级", 5))    --屠龙大宝刀5级
	print(string.format("屠龙大宝刀%s级", "五"))    --屠龙大宝刀五级
	print(string.format("浮点型%f", 3.14))    --浮点型3.140000

	--string.gmatch (s, pattern)
		--这个函数基本就是用来配合for循环使用的,返回一个迭代器函数,每次调用这个迭代器函数都会返回一个匹配该字符串的值。
		s = "hello world from Lua"
		for w in string.gmatch(s, "%a+") do
		    print(w)    --连续输出每个单词
		end

	--string.gsub (s, pattern, repl [, n])
		--这个函数用来进行字符替换的。将每个匹配的字符串替换成指定的字符串repl。返回替换完毕的字符串和替换的次数。个人觉得这个函数非常有意思。
		--若repl为函数则会用匹配到的参数作为参数调用这个函数,若repl为table,则会用匹配到的参数作为键去查找这个表。
		--字符串
		print(string.gsub("i have an apple", "apple", "peach"))
		--函数
		function ff( arg )
		    print("function arg : " .. arg)
		end
		print(string.gsub("my name is qsk", "%a+", ff))
		--table
		t = {}
		metat = {}
		metat.__index = function ( table,key )        
		    return "!!" .. key
		end
		setmetatable(t, metat)
		print(string.gsub("my name is qsk", "%a+", t))

-- string.len (s)
	-- 求字符串的长度	
	local str3 = "埃尔法" -- 中文占3个字符
	print(string.len(str3))

	local str4 = "AS"
	local str5 = "123"
	print(string.len(str4),string.len(str5)) -- 英文和数字占1个字符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值