lua 字符串常用操作 - split contains lower upper

lua中对于字符串的操作是非常频繁的,如果你熟悉一种编程语言,那么你在编写lua代码的时候一定会想,在Java中支持的字符串切分split,在lua中是否支持呢?这里就给大家整理了一些lua中常见的字符串操作。

整理6个常用方法:转大写、转小写、是否包含、反转、split切割

1、字符串转小写 string.lower()

-- 定义一个字符串
local s = "abcDeF";
-- 字符串转小写
local trans = string.lower(s);

print(trans); -- abcdef

2、字符串转大写 string.upper()

-- 定义一个字符串
local s = "abcDeF";
-- 字符串转小写
local trans = string.upper(s);

print(trans); -- ABCDEF

3、是否包含某字符串 

find

经常有需求需要判断在A字符串中是否包含B字符串的需要,比如我们判断请求的body体是否是json类型,那么我们就需要判断请求头的Content-Type的值中是否包含application/json。有朋友说了,那我直接用 == 判断不就可以了吗,不要忘记,Content-Type的值可能为: application/json;charset=utf8这种格式。那该如何处理呢?

-- 定义一个字符串
local s = "application/json;charset=utf-8";
-- 查找指定字符串在定义的字符串的位置
local pos = string.find(s, "application/json");

print(pos); -- 1

如果没有find到,返回nil,这个时候就可以写if来判断了。

-- 定义一个字符串
local s = "application/json;charset=utf-8";
-- 查找指定字符串在定义的字符串的位置
local pos = string.find(s, "application/json");

if not pos then
  print("不包含");
else 
  print("包含");
end;

print(pos); -- 1

那么客户端传入的Content-Type的值可能为 Applicatoin/JSON的形式,那就可以借助上面说的转大小写之后再判断了,如下

-- 定义一个字符串
local s = "application/json;charset=utf-8";
-- 查找指定字符串在定义的字符串的位置
local pos = string.find(
	string.lower(s), "application/json");

if not pos then
  print("不包含");
else 
  print("包含");
end;

print(pos); -- 1

match

match 和 find之间的区别是,find匹配到之后返回的是查找的字符串在原字符串的位置,match匹配到之后,返回的是查找的字符串的值

-- 定义一个字符串
local s = "application/json;charset=utf-8";
-- 查找指定字符串在定义的字符串的位置
local pos = string.match(
	string.lower(s), "application/json");

print(pos); -- application/json

4、字符串截取

字符串的截取在编码过程中,也是非常常用的。sub可以进行字符串的截取操作。

string.sub(str,beginIndex,endIndex); [beginIndex, endIndex] 全闭区间

-- 定义一个字符串
local s = "application/json;charset=utf-8";
-- 从第4个位置截取到第5个位置
local subs = string.sub(s,4,5);

print(subs); -- li

注意:在lua中角标都是从 1 开始。不是从 0 开始。

5、字符串反转

这个很少用,就是一个reserve方法

-- 定义一个字符串
local s = "application/json;charset=utf-8";
-- 字符串反转
local r = string.reverse(s);

print(r); -- 8-ftu=tesrahc;nosj/noitacilppa

6、字符串切割

在Java中,使用split方法可以非常方便的进行字符串的切割,在lua中就没那么方便了。对不起,没有现成的方法,需要自己实现。下面是写好的轮子,拿去用吧。

function split(input, delimiter)
    input = tostring(input);
    delimiter = tostring(delimiter);
    if (delimiter == "") then return false end;
    local pos, arr = 0, {};
    for st, sp in function() return string.find(input, delimiter, pos, true) end do
        table.insert(arr, string.sub(input, pos, st - 1));
        pos = sp + 1;
    end;
    table.insert(arr, string.sub(input, pos));
    return arr;
end

到此为止,就这么多了,如果你用到了这里没有整理的,欢迎在下面留言哦。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值