`
leiwuqing
  • 浏览: 14796 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

lua string 函数3

    博客分类:
  • lua
 
阅读更多

Lua中的字符串函数库

 

 

Lua解释器对字符串的支持很有限。一个程序可以创建字符串并连接字符串,但不能截取子串,检查字符串的大小,检测字符串的内容。在Lua中操纵字符串的功能基本来自于string库。

字符串库中的一些函数是非常简单的:

string.len(s)          返回字符串s的长度;
string.rep(s, n)      返回重复n次字符串s的串;你使用string.rep("a", 2^20)可以创建一个1M bytes的字符串(比如,为了测试需要);
string.lower(s)       将s中的大写字母转换成小写(string.upper将小写转换成大写)。如果你想不关心大小写对一个数组进行排序的话,你可以这样:
                             table.sort(a, function (a, b) return string.lower(a) < string.lower(b) end)
string.upper(s)       将s中的小写字母转换成大写
                            string.upperstring.lower都依赖于本地环境变量。所以,如果你在 European Latin-1环境下,表达式:
                            string.upper("a??o")    --> "A??O"
string.sub(s,i,j)      函数截取字符串s的从第i个字符到第j个字符之间的串。Lua中,字符串的第一个字符索引从1开始。你也可以使用负索引,负索引从字符串的结尾向前计数:-1指向最后一个字符,-2指向倒数第二个,以此类推。所以, string.sub(s, 1, j)返回字符串s的长度为j的前缀;string.sub(s, j, -1)返回从第j个字符开始的后缀。如果不提供第3个参数,默认为-1,因此我们将最后一个调用写为string.sub(s, j);string.sub(s, 2, -2)返回去除第一个和最后一个字符后的子串。
s = "[in brackets]"
print(string.sub(s, 2, -2)) --> in brackets
记住:Lua中的字符串是恒定不变的。string.sub函数以及Lua中其他的字符串操作函数都不会改变字符串的值,而是返回一个新的字符串。一个常见的错误是:
string.sub(s, 2, -2)
认为上面的这个函数会改变字符串s的值。如果你想修改一个字符串变量的值,你必须将变量赋给一个新的字符串:
s = string.sub(s, 2, -2)
string.char函数和string.byte函数用来将字符在字符和数字之间转换。string.char获取0个或多个整数,将每一个数字转换成字符,然后返回一个所有这些字符连接起来的字符串。string.byte(s, i)将字符串s的第i个字符的转换成整数;第二个参数是可选的,缺省情况下i=1。下面的例子中,我们假定字符用ASCII表示:

print(string.char(97)) --> a
i = 99; print(string.char(i, i+1, i+2)) --> cde
print(string.byte("abc")) --> 97
print(string.byte("abc", 2)) --> 98
print(string.byte("abc", -1)) --> 99 

上面最后一行,我们使用负数索引访问字符串的最后一个字符。

Lua提供了string.format()函数来生成具有特定格式的字符串, 函数的第一个参数是格式(formatstring), 之后是对应格式中每个代号的各种数据. 由于格式字符串的存在, 使得产生的长字符串可读性大大提高了. 这个函数的格式很像C语言中的printf().函数string.format在用来对字符串进行格式化的时候,特别是字符串输出,是功能强大的工具。这个函数有两个参数,你完全可以照C语言的printf来使用这个函数。第一个参数为格式化串:由指示符和控制格式的字符组成。指示符后的控制格式的字符可以为:十进制'd';十六进制'x';八进制'o';浮点数'f';字符串's'。在指示符'%'和控制格式字符之间还可以有其他的选项:用来控制更详细的格式,比如一个浮点数的小数的位数:

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

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

在这些参数的后面则是上述所列的转义码类型(c, d, i, f, ...).


print(string.format("pi = %.4f", PI))
      --> pi = 3.1416
d = 5; m = 11; y = 1990
print(string.format("%02d/%02d/%04d", d, m, y))
        --> 05/11/1990
tag, title = "h1", "a title"
print(string.format("<%s>%s</%s>", tag, title, tag))
        --> <h1>a title</h1>

第一个例子,%.4f代表小数点后面有4位小数的浮点数。第二个例子%02d代表以固定的两位显示十进制数,不足的前面补0。而%2d前面没有指定0,不足两位时会以空白补足。对于格式串部分指示符得详细描述清参考lua手册,或者参考C手册,因为Lua调用标准C的printf函数来实现最终的功能。

以下是一些例子:


string.format("%%c: %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\nTwo")         输出"One\
                                          Two"
string.format("%s", "monkey")           输出monkey
string.format("%10s", "monkey")         输出    monkey
string.format("%5.3s", "monkey")        输出  mon

分享到:
评论

相关推荐

    Lua UnPack函数用法实例

    在Lua编程语言中,unpack函数是一个非常实用且高效的工具,它主要用于从数组类型的table中解包元素。在本文中,我们将详细介绍unpack函数的用法,包括它的基本功能和如何通过实例来掌握它的使用技巧。 首先,让我们...

    LUA-string库函数

    LUA-string 库函数是 Lua 语言中的一个基本库,提供了多种字符串操作函数,帮助开发者更方便地处理字符串。 string.len 函数 string.len 函数返回字符串 s 的长度。该函数可以用于获取字符串的长度,例如: ```...

    Lua的使用入门之在C++程序中调用lua函数1

    3. **调用Lua函数** 要从C++中调用Lua函数,首先需要使用`lua_getglobal()`获取全局函数引用,然后通过`lua_pcall()`执行该函数。假设`move`函数在全局环境中,调用方式如下: ```cpp lua_getglobal(L, "move"); ...

    lua调用C++函数

    3. **Lua的调用约定**:在C++中,你需要使用`luaL_register`或`lua_register`函数将C++函数导出给Lua。这些函数需要一个lua_State指针和两个字符串参数,分别代表函数名和对应的C++函数指针。 4. **C++函数处理Lua...

    lua参考手册和lua常用函数

    3. **函数与闭包**:Lua中的函数是第一类公民,可以作为参数传递,也可以作为返回值。闭包的概念则允许函数访问并修改其词法作用域内的变量。 4. **元编程**:Lua通过Metatables提供了一种灵活的元编程机制,可以...

    C\C++中调用Lua函数的接口封装

    3. **调用Lua函数**: 调用Lua函数需要先找到函数在栈上的位置,然后调用`lua_call`执行。`lua_getglobal`用于获取全局变量(假设是函数),或者`lua_gettable`用于从表中获取函数。`lua_pcall`用于安全地调用 Lua ...

    Lua编程事例:调用Lua有参函数

    对于字符串,使用`lua_pushstring`;对于表格,使用`lua_createtable`创建并使用`lua_setfield`和`lua_getfield`操作;对于用户数据,可以使用`lua_newuserdata`和`lua_setmetatable`。 最后,文件"VC清理助手.bat...

    Lua的最基本使用 C++与lua的互相调用

    使用`lua_pushnumber`、`lua_pushstring`等函数将C++数据推送到Lua栈,使用`lua_tonumber`、`lua_tostring`等函数从Lua栈获取数据。 6. 清理:调用`lua_settop(L, 0)`清空栈,防止内存泄漏。 二、Lua调用C++函数 ...

    LuaAction C++访问LUA函数

    目前,LuaAction已经实现了对INT(整型)、STRING(字符串)和TABLE(表)三种基本类型的参数支持。在C++中,你可以直接传入这些类型的数据,而在Lua中,它们会被正确地解析和处理。同样,当Lua函数返回这些类型的...

    c++调用lua的函数

    C++调用Lua函数是将C++代码与Lua脚本集成的一种常见方法,这使得开发者可以利用Lua的灵活性和简洁性编写部分逻辑,同时利用C++的高性能和系统级功能。Lua是一种轻量级的脚本语言,常用于游戏开发、配置文件、扩展...

    lua 的string相关方法

    Lua的字符串是不可变的,这意味着string库中的所有函数都不会直接修改原始字符串,而是返回一个新的字符串作为结果。接下来,我们将深入探讨Lua中与字符串相关的各种方法。 1. `len` 函数:这个函数用于计算字符串...

    常用lua函数

    ### 常用Lua函数详解 #### 一、字符串填充函数 在Lua中,字符串处理是非常常见的需求之一。本文档提供了三个字符串填充函数:`StrFillC`、`StrFillL`、`StrFillR`,用于实现字符串的中心填充、左填充和右填充。 ##...

    lua调用C/C++函数

    local result = add(3, 5) -- Lua中调用C函数 print(result) -- 输出:8 ``` 总结,Lua调用C/C++函数涉及到以下几个步骤: 1. 初始化Lua状态机。 2. 加载并执行Lua脚本。 3. 使用`lua_register`或`lua_...

    C# lua库 支持中文函数名中文变量

    3. 加载和执行Lua脚本:你可以从文件或字符串中加载Lua代码,然后调用`DoFile`或`DoString`执行。 ```csharp lua.DoFile("your_script.lua"); lua.DoString("你的脚本代码"); ``` 4. 访问和操作Lua变量:使用...

    LUA脚本练习工具,不太讲究的话,效果还可以

    3. 函数:LUA中的函数是一等公民,可以作为参数传递和返回。function关键字用于定义函数,local关键字可使函数成为局部变量。 4. 表(Table):LUA的表是其最强大的特性之一,它相当于其他语言中的数组、集合、字典...

    Lua中string.len()使用指南

    - **其他字符串处理函数**:Lua中的`string`库还提供了许多其他的字符串处理函数,例如`string.sub()`用于获取子字符串、`string.find()`用于查找子字符串的位置等。 - **字符串编码**:在处理多字节字符集(如UTF-8...

    运用lua的io和String展开协议里的多种复杂字段

    标题中的“运用lua的io和String展开协议里的多种复杂字段”揭示了主要涉及的三个技术领域:Lua语言、io模块以及String操作。Lua是一种轻量级的脚本语言,广泛应用于游戏开发、嵌入式系统以及服务器配置等领域。在...

    Lua小程序十六进制字符串和二进制数据间的转换[借鉴].pdf

    在 Lua 中,可以使用 string.len 函数来获取十六进制字符串的长度,然后使用 for 循环来遍历整个字符串,使用 string.sub 函数来截取每两个字符,使用 tonumber 函数将其转换为数字,最后使用 string.format 函数将...

    lua函数脚本分析

    3. **调用次数**:记录函数被调用的次数。 4. **平均调用时间**:函数每次调用的平均执行时间。 5. **最长调用时间**:函数单次调用的最大执行时间。 6. **时间加权平均调用时间**:考虑到函数调用次数的影响,对...

    Lua中文教程&中文手册

    3. **函数与模块**:Lua中的函数是第一类公民,可以作为参数传递,也可以作为返回值。同时,Lua支持自定义模块,便于组织和重用代码。 4. **闭包与迭代器**:Lua的闭包机制使得函数可以访问并操作外部环境的变量,...

Global site tag (gtag.js) - Google Analytics