Lua中字符串(string)浅析

Lua中字符串可以使用""或''声明,类似Javascript中的用法。

代码如下:

> ="sdfdsf"
sdfdsf
> ='sfdd'
sfdd
> ='abc"'
abc"
> ="abc'"
abc'

同Java、Python一样,Lua的字符串是不可修改的值,可以通过string.gsub函数来替换字符串中的子串:

代码如下:

> s = string.gsub('abc def', 'def', 'efg')
> =s
abc efg

另外,Lua的字符串和其他Lua对象(如table和函数等)一样,都是自动内存管理机制所管理的对象。Lua能够高效的处理长字符串,操作100K或者1M的字符串是常见的。

另外同Python一样,可以轻松使用块字符串:

代码如下:

page = [[
<html>
<h1>hello world</h1>
</html>
]]

Lua提供了运行时的数字与字符串的自动转换:

代码如下:

> ='10' + 1
11
> ='hello' + 1
stdin:1: attempt to perform arithmetic on a string value
stack traceback:
stdin:1: in main chunk
[C]: in ?
> ='10'*'2'
20

Lua不仅会在算术操作中执行这种强制转换,还会在其他任何需要数字的地方这么做。相反,如果Lua期望一个字符串,而得到一个数字时,会将数字转换为字符串。

代码如下:

> =10 .. 20
1020

在lua中..是字符串连接操作符;

但是不要依赖这种类型转换,10 == "10"为false,因为类型不同。

如果想把一个字符串转换为数字,可以使用tonumber,如果不能转换,返回nil;反过来,可以使用tostring将数字转换为字符串。

有趣的是:tostring(10) == "10", 10 .. "" == "10";
 
另外在Lua5.1中,可以使用#来获取字符串的长度

代码如下:

> =#"3223"
4
> a = "3224"
> =#a
4

另外需要注意的是,\0在Lua中含义不同于其他语言如C.

代码如下:

> ='abc\0abc'
abcabc
> =#'abc\0abc'
7

(0)

相关推荐

  • LUA string库使用小结

    1. string库中所有的字符索引从前往后是1,2,...;从后往前是-1,-2,... 2. string库中所有的function都不会直接操作字符串,而是返回一个结果 复制代码 代码如下: s = "[abc]" string.len(s)        <==返回5 string.rep("abc", 2) <==返回"abcabc" string.lower("ABC") <==返回"a

  • Lua中string.len()使用指南

    前言 今天是星期天,我还是不浪费大家的脑细胞了,直接来列举一个string家族中比较简单的函数,函数虽然简单,但是用处却很大,使用频率也很高,废话不多说,我们直接来看函数用法. 内容 string.len() 原型:string.len(s) 解释:返回所给字符串的长度,如果字符串中包含'\0',也会被统计为一个字符. Usage 首先新建一个文件将文件命名为lentest.lua然后编写如下代码: -- 一个常规字符串 local sourcestr = "This is a rainy da

  • Lua字符串库(string库)学习笔记

    Lua 最强大的特性之一就是它的字符串处理能力,它支持字符格式化输出,具有可扩展的模式匹配查找功能,以及一些实用的字符操作,例如查询.截取.替换和删除等字符串操作,这些字符串操作函数都封装在一个名为 string 的模块里. Lua 里的字符索引是从 1 开始,索引值也可以是负数,这种情况将被解释成向后索引,从字符串末尾开始算起. 下面是 Lua 5.2 提供的字符串操作函数: byte 函数 string.byte 把字符串里的第 i 个字符转为 ASCII编码,默认是输出第一个字符的编码(只

  • Lua loadstring函数用法实例

    该函数的返回值是返回一个function,如果load失败,则返回nil 例子代码: 复制代码 代码如下: --i = 32  local i = 0  f = loadstring("i = 1 + i; print(i)");  g = function ()          i = 1 + i;          print(i)      end  f()  g() f操作的全局i,g操作的是局部i,因为,loadstring总是在全局环境中去编译它的字符串 loadstri

  • Lua中string.lower()使用指南

    前言 今天我们总结的函数也比较简单,函数的作用的将所给字符串的中的大写字母转换成小写字母,这种操作往往出现在比较操作之前,比如验证码通常都是不区分大小写的,接下来我们一起看一下函数的用法. 内容 string.lower() 原型:string.lower(s) 解释:接收一个字符串,然后返回一个将字符串中大写字母转化为小写字母的字符串副本,除此之外其他字符都不会被改变,大写字母的定义依赖于当前的本地设置. Usage 首先我们新建一个文件将文件命名为lowertest.lua然后编写代码如下:

  • Lua中的loadfile、dofile、loadstring、require用法实例

    复制代码 代码如下: do  local errorInfo = loadfile("test.lua"); --load code file  if(errorInfo == nil) then   print("load file failed");  else   print("load file success");   local doInfo = dofile("test.lua") --complie the f

  • Lua中实现StringBuffer功能

    在Lua中,字符串是一个常量,如果用字符串连接符".."把2个字符串连接起来,例如first_str = first_str .. second_str,那么原来的first_str和second_str就会作为垃圾等待回收,first_str引用的是一个新的字符串,如果在程序里面有大量的字符串连接操作的话,性能会十分低下.Lua是一个很简洁的语言,他没有StringBuffer的实现,但是其实我们可以动手写一个简单的StringBuffer实现,来避免性能的问题. 首先定义一个叫St

  • Lua中的string库(字符串函数库)总结

    Lua解释器对字符串的支持很有限.一个程序可以创建字符串并连接字符串,但不能截取子串,检查字符串的大小,检测字符串的内容.在Lua中操纵字符串的功能基本来自于string库. 字符串库中的一些函数是非常简单的: string.len(s)          返回字符串s的长度: string.rep(s, n)      返回重复n次字符串s的串:你使用string.rep("a", 2^20)可以创建一个1M bytes的字符串(比如,为了测试需要): string.lower(s)

  • Lua中的string库和强大的模式匹配学习笔记

    lua原生解释器对字符串的处理能力是十分有限的,强大的字符串操作能力来自于string库.lua的string函数导出在string module中.在lua5.1,同时也作为string类型的成员方法,因此,我们既可以写成string.upper(s), 也可以s:upper(),选择你喜欢的写法. string.len(s)返回s的长度. string.rep(s, n)返回重复s字符串n次的字符串. string.lower(s)返回一份已将大写转成小写的字符串s的拷贝 lower,upp

  • Lua中字符串(string)浅析

    Lua中字符串可以使用""或''声明,类似Javascript中的用法. 复制代码 代码如下: > ="sdfdsf" sdfdsf > ='sfdd' sfdd > ='abc"' abc" > ="abc'" abc' 同Java.Python一样,Lua的字符串是不可修改的值,可以通过string.gsub函数来替换字符串中的子串: 复制代码 代码如下: > s = string.gsub(

  • 浅谈javascript中字符串String与数组Array

    简单点就是string是字符(串)... 而array是数组...可以放数字啊,字符啊等一系列东东!!! 上个示例: 复制代码 代码如下: var str = "liuzhanqi"; document.write(str["length"]);//等价str.l ength  var str = string.fromcharcode(72, 101, 108, 108, 111, 33); document.write(str); //各整数作为unicode编

  • ES6中字符串string常用的新增方法小结

    本文实例讲述了ES6中字符串string常用的新增方法.分享给大家供大家参考,具体如下: ES6为js新增了很多方法,包括遍历.查询.替换等等,可以很简洁的替换ES5中的类似方法,本文不考虑codePointAt等不常用方法. for-of: let str="wbiokr"; for(let s of str){ console.log(s) } //结果:w, b, i, o, k, r 由于es5并没有为js制定字符串相关遍历方法,for-of无疑会是接下来前端开发中的一个很重要

  • Python中字符串String的基本内置函数与过滤字符模块函数的基本用法

    首先我们要明白在python中当字符编码为:UTF-8时,中文在字符串中的占位为3个字节,其余字符为一个字节 下面就直接介绍几种python中字符串常用的几种字符串内置函数(本文中牵扯到了模块与一些之前章节没讲过的相关知识,坑我之后会填的) 字符串切片(截取字符串): #字符串切片 string[开始位置:结束位置:步长] name = "巩祎鹏"print(name[0:]) #从第一个字符截取到最后一个字符 print(name[0:2]) #从第一个字符截取到第二个字符 prin

  • python中字符串String及其常见操作指南(方法、函数)

    目录 下标与切片 常见方法 查找 替换 分割 大小写格式化 对齐格式化 清除空白字符 检查 补充:16个常用函数 总结 注意:对字符串的所有操作,原始数据(即原字符串)不变 !(字符串是不可变类型) 对原字符串操作会返回一个操作后的数据, 可以使用变量去接受数据 ----------------------------------------------------------------------------------------------------------------------

  • Golang中字符串(string)与字节数组([]byte)一行代码互转实例

    目录 一.字符串与字节数组? 二.详细代码 1.简单的方式字节转字符串 2.简单的字符串转字节数组 3.字节转字符串 4.字符串转字节数组 5.完整运行测试 补充:一些结论如下 总结 一.字符串与字节数组? 字符串是 Go 语言中最常用的基础数据类型之一,本质上是只读的字符型数组,虽然字符串往往都被看做是一个整体,但是实际上字符串是一片连续的内存空间. Go 语言中另外一个类型字节(Byte).在ASCII中,一个英文字母占一个字节的空间,一个中文汉字占两个字节的空间.英文标点占一个字节,中文标

  • Java中字符串String的+和+=及循环操作String原理详解

    String对象是不可变的:意思就是无论是对String的新增或修改,出现一个全新的String内容时,都意味着诞生了一个新的对象.但是如果内容不变的话,增加的只是对象的引用而已. 例如: String a = "ljh"; String b = "ljh"; String c = "ljh"; System.out.println(a==b); System.out.println(b==c); 结果都是true 但是这种不可变性会产生一些性能

  • Lua中的table浅析

    Lua的table提供了Map的功能,实现了"关联数组",并且整数.字符串甚至nil都可以作为索引/key:table没有固定的大小.   基于table,可以表示普通数组.符号表.集合.记录.队列和其他数据结构.   而Lua也是通过table来解决模块(module).包(package)和对象(Object)的. 例如io.read表示使用"read"来索引table io.   在Lua中,table既不是值也不是"变量",而是对象,可以

随机推荐