zoukankan      html  css  js  c++  java
  • Lua 字符串

    字符串或串(String)是由数字、字母、下划线组成的一串字符。

    Lua 语言中字符串可以使用以下三种方式来表示:

    • 单引号间的一串字符。
    • 双引号间的一串字符。
    • [[和]]间的一串字符。

    示例

    string1 = "Lua"
    print(""字符串 1 是"",string1)
    string2 = 'runoob.com'
    print("字符串 2 是",string2)
    
    string3 = [["Lua 教程"]]
    print("字符串 3 是",string3)

    输出

    "字符串 1 是"    Lua
    字符串 2 是    runoob.com
    字符串 3"Lua 教程"

    string.upper(argument):字符串全部转为大写字母

    string.lower(argument):字符串全部转为小写字母

    string.gsub(mainString,findString,replaceString,num)
    在字符串中替换,mainString为要替换的字符串, findString 为被替换的字符,replaceString 要替换的字符,num 替换次数(可以忽略,则全部替换)

    示例

    > string.gsub("aaaa","a","z",3);
    zzza    3

    string.find (str, substr, [init, [end]])
    在一个指定的目标字符串中搜索指定的内容(第三个参数为索引),返回其具体位置。不存在则返回 nil。

    > string.find("Hello Lua user", "Lua", 1) 
    7    9

    string.reverse(arg)
    字符串反转

    > string.reverse("Lua")
    auL

     string.format(...)
    返回一个类似printf的格式化字符串

    > string.format("the value is:%d",4)
    the value is:4

    string.char(arg) 和 string.byte(arg[,int])
    char 将整型数字转成字符并连接, byte 转换字符为整数值(可以指定某个字符,默认第一个字符)

    > string.char(97,98,99,100)
    abcd
    > string.byte("ABCD",4)
    68
    > string.byte("ABCD")
    65
    >

     string.len(arg)
    计算字符串长度

    string.len("abc")
    3

    string.rep(string, n)
    返回字符串string的n个拷贝

    
    
    > string.rep("abcd",2)
    abcdabcd
     

    ..
    链接两个字符串

    > print("www.runoob".."com")
    www.runoobcom
    string.gmatch(str, pattern)
    回一个迭代器函数,每一次调用这个函数,返回一个在字符串 str 找到的下一个符合 pattern 描述的子串。如果参数 pattern 描述的字符串没有找到,迭代函数返回nil
    > for word in string.gmatch("Hello Lua user", "%a+") do print(word) end
    Hello
    Lua
    user

     string.match(str, pattern, init)
    string.match()只寻找源字串str中的第一个配对. 参数init可选, 指定搜寻过程的起点, 默认为1。 
    在成功配对时, 函数将返回配对表达式中的所有捕获结果; 如果没有设置捕获标记, 则返回整个配对字符串. 当没有成功的配对时, 返回nil

    > = string.match("I have 2 questions for you.", "%d+ %a+")
    2 questions
    
    > = string.format("%d, %q", string.match("I have 2 questions for you.", "(%d+) (%a+)"))
    2, "questions"

    字符串大小写转换

    string1 = "Lua";
    print(string.upper(string1))
    print(string.lower(string1))

    输出

    LUA
    lua

    字符串查找与反转

    string = "Lua Tutorial"
    -- 查找字符串
    print(string.find(string,"Tutorial"))
    reversedString = string.reverse(string)
    print("新字符串为",reversedString)

    输出

    5    12
    新字符串为    lairotuT auL

    字符串格式化

    Lua 提供了 string.format() 函数来生成具有特定格式的字符串, 函数的第一个参数是格式 , 之后是对应格式中每个代号的各种数据。

    由于格式字符串的存在, 使得产生的长字符串可读性大大提高了。这个函数的格式很像 C 语言中的 printf()。

    以下实例演示了如何对字符串进行格式化操作:

    格式字符串可能包含以下的转义码:

    • %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位.

     示例

    string1 = "Lua"
    string2 = "Tutorial"
    number1 = 10
    number2 = 20
    -- 基本字符串格式化
    print(string.format("基本格式化 %s %s",string1,string2))
    -- 日期格式化
    date = 2; month = 1; year = 2014
    print(string.format("日期格式化 %02d/%02d/%03d", date, month, year))
    -- 十进制格式化
    print(string.format("%.4f",1/3))

    输出

    基本格式化 Lua Tutorial
    日期格式化 02/01/2014
    0.3333

    示例

    string.format("%c", 83)            输出S
    string.format("%+d", 17.0)              输出+17
    string.format("%05d", 17)               输出00017
    string.format("%o", 17)                 输出21
    string.format("%u", 3.14)               输出3
    string.format("%x", 13)                 输出d
    string.format("%X", 13)                 输出D
    string.format("%e", 1000)               输出1.000000e+03
    string.format("%E", 1000)               输出1.000000E+03
    string.format("%6.3f", 13)              输出13.000
    string.format("%q", "One
    Two")         输出"One
                                              Two"
    string.format("%s", "monkey")           输出monkey
    string.format("%10s", "monkey")         输出    monkey
    string.format("%5.3s", "monkey")        输出  mon

    字符与整数相互转换

    -- 字符转换
    -- 转换第一个字符
    print(string.byte("Lua"))
    -- 转换第三个字符
    print(string.byte("Lua",3))
    -- 转换末尾第一个字符
    print(string.byte("Lua",-1))
    -- 第二个字符
    print(string.byte("Lua",2))
    -- 转换末尾第二个字符
    print(string.byte("Lua",-2))
    
    -- 整数 ASCII 码转换为字符
    print(string.char(97))

    输出

    76
    97
    97
    117
    117
    a

    其他常用函数

    示例

    string1 = "www."
    string2 = "runoob"
    string3 = ".com"
    -- 使用 .. 进行字符串连接
    print("连接字符串",string1..string2..string3)
    
    -- 字符串长度
    print("字符串长度 ",string.len(string2))
    
    -- 字符串复制 2 次
    repeatedString = string.rep(string2,2)
    print(repeatedString)

    输出

    连接字符串    www.runoob.com
    字符串长度     6
    runoobrunoob

    匹配模式

    s = "Deadline is 30/05/1999, firm"
    date = "%d%d/%d%d/%d%d%d%d"
    print(string.sub(s, string.find(s, date)))    --> 30/05/1999

    下面的表列出了Lua支持的所有字符类:

    单个字符(除 ^$()%.[]*+-? 外): 与该字符自身配对

    • .(点): 与任何字符配对
    • %a: 与任何字母配对
    • %c: 与任何控制符配对(例如 )
    • %d: 与任何数字配对
    • %l: 与任何小写字母配对
    • %p: 与任何标点(punctuation)配对
    • %s: 与空白字符配对
    • %u: 与任何大写字母配对
    • %w: 与任何字母/数字配对
    • %x: 与任何十六进制数配对
    • %z: 与任何代表0的字符配对
    • %x(此处x是非字母非数字字符): 与字符x配对. 主要用来处理表达式中有功能的字符(^$()%.[]*+-?)的配对问题, 例如%%与%配对
    • [数个字符类]: 与任何[]中包含的字符类配对. 例如[%w_]与任何字母/数字, 或下划线符号(_)配对
    • [^数个字符类]: 与任何不包含在[]中的字符类配对. 例如[^%s]与任何非空白字符配对

    当上述的字符类用大写书写时, 表示与非此字符类的任何字符配对. 例如, %S表示与任何非空白字符配对.例如,'%A'非字母的字符:

    > print(string.gsub("hello, up-down!", "%A", "."))
    hello..up.down.    4

  • 相关阅读:
    基于网络服务器端的网口测试-软件
    JAVA中操作符的优先级
    逻辑操作符、位操作符号的忽略点
    Java配置环境变量、方法和原因
    Java中常用的字符编码-解析
    SVM
    C#与matlab混合编程
    Python 3 and MySQL
    PyMySQL Evaluation
    PYTHON3连接MYSQL数据库
  • 原文地址:https://www.cnblogs.com/sea-stream/p/9999424.html
Copyright © 2011-2022 走看看