【Lua】第四篇:字符串操作

文章目录

  • 一. Lua中字符串的表示方法
  • 二. 获取字符串长度
  • 三. 字符串多行打印
    • 方法一:使用 \n 换行
    • 方法一:使用 [[ ]]
  • 四. 字符串拼接
  • 五. 别的类型转字符串
  • 六. 常用字符串接口
    • 1. 把字符串内容全转为小写
    • 2. 把字符串内容全转为大写
    • 3. 字符串翻转
    • 4. 子串查找
    • 4. 获取子串
    • 5. 子串替换
    • 6. 字符串重复拼接

一. Lua中字符串的表示方法

在 Lua 中,不区分字符和字符串,使用单引号(‘’)和双引号(“”)括起来的,都统称为 string 类型

local s1 = '单引号字符串'
local s2 = "双引号字符串"
print(type(s1)) --> string
print(type(s2)) --> string

二. 获取字符串长度

在字符串变量名之前加上 # 符号,可以获取到该字符串的长度:

local str = 'abc,de'
print(#str) --> 6

其中一个汉字占三个长度:

local str = '我'
print(#str) --> 3

三. 字符串多行打印

方法一:使用 \n 换行

PS:Lua 中也是支持转义字符的,所以我们可以在 \n 进行换行

local s1 = '123\n456'
print(s1)------输出结果------
123
456

方法一:使用 [[ ]]

print 在打印时,如果检测到有双方括号,会严格地按照里面的格式把内容进行输出:
在这里插入图片描述

四. 字符串拼接

在使用 print 打印时,可以使用 … 把两边的内容进行拼接,它的作用相当于 +,但是它的作用范围更广,不加可以拼接字符串,还可以拼接数值类型的值:
在这里插入图片描述

注意:不能拼接 boolean 类型的值

--拼接:字符串+boolean 
print('123' .. false) --> error:不允许拼接 boolean 的值

五. 别的类型转字符串

我们可以使用 tostring 方法,把非字符串类型转成字符串:

local bl = false 
print(type(bl)) --> boolean
print(type(tostring(b1))) --> string

六. 常用字符串接口

根据“二八原则”,在实际开中,20% 的接口函数就能解决 80% 的问题,下面我们介绍几个常用的字符串接口函数

1. 把字符串内容全转为小写

函数原型:string.lower (s)

函数介绍:接收一个字符串,将其中的大写字符都转为小写后返回其副本。 其它的字符串不会更改。

local s = "abCdefgCd"
print(string.lower(s)) -->abcdefgcd

2. 把字符串内容全转为大写

函数原型:string.upper (s)

函数介绍:接收一个字符串,将其中的小写字符全都转为大写后返回其副本。其它的字符串不会更改。

local s = "abCdefgCd"
print(string.upper(s)) -->ABCDEFGCD

3. 字符串翻转

函数原型:string.reverse (s)

函数介绍:原字符串的内容不变,返回字符串 s 的翻转串

local s = "abCdefgCd"
print(string.reverse(s)) -->dCgfedCba
print(s) -->abCdefgCd

4. 子串查找

函数原型:string.find (s, subStr [, init [, plain]])

函数介绍

  • 查找第一个字符串 s 中匹配到的 subStr。 如果找到一个匹配,find 会返回 s 中关于它起始及终点位置的索引; 否则,返回 nil。
  • 第三个可选数字参数 init 指明从哪里开始搜索; 默认值为 1 ,同时可以是负值,表示从后往前搜索。
  • 第四个可选参数 plain 为 true 时, 表示关闭模式匹配机制。 此时函数仅做直接的 “查找子串”的操作, 而 pattern 中没有字符被看作 magic 字符。 注意,如果给定了 plain,就必须写上 init 。

代码示例

local s = "abCdefgCd"
print(string.find(s, "Cde")) --> 3       5

4. 获取子串

函数原型:string.sub (s, i [, j])

函数介绍:返回 s 的子串, 该子串从 i 开始到 j 结束; i 和 j 都可以为负数。 如果不给出 j ,就当它是 -1 (和字符串长度相同)。

特别是, 调用 string.sub(s,1,j) 可以返回 s 的长度为 j 的前缀串:

-- 注意:Lua中,起始下标是从1开始的
local s = "abCdefgCd"
print(string.sub(s, 1, 4)) -->abCd

而 string.sub(s, -i) 返回长度为 i 的后缀串:

-- 注意:-i 的含义相当于倒数第 i 个字符
local s = "abCdefgCd"
print(string.sub(s, -2)) -->Cd

如果在对负数索引转义后 i 小于 1 的话,就修正回 1:
在这里插入图片描述

如果 j 比字符串的长度还大,就修正为字符串长度。 如果在修正之后,i 大于 j, 函数返回空串:

local s = "abCdefgCd"
print(string.sub(s, 1, 500)) -->abCdefgCd
print(string.sub(s, 1000, 500)) -->''

5. 子串替换

函数原型:string.gsub (s, sunStr, repl [, n])

函数介绍:将字符串 s 中,所有的(或是在 n 给出时的前 n 个) sunStr 都替换成 repl ,并返回其副本。 repl 可以是字符串、表、或函数。 gsub 还会在第二个返回值返回一共发生了多少次匹配。 gsub 这个名字来源于 Global SUBstitution 。

local s = "abCdefgCd"
print(string.gsub(s, "Cd", "**")) -->ab**efg**       2

6. 字符串重复拼接

函数介绍:string.rep (s, n [, sep])

函数原型:返回 n 个字符串 s 以字符串 sep 为分割符连在一起的字符串。 默认的 sep 值为空字符串(即没有分割符)。 如果 n 不是正数则返回空串。

local s = "abCdefgCd"
print(string.rep(s, 2)) -->abCdefgCdabCdefgCd
print(string.rep(s, 2, ', ')) -->abCdefgCd, abCdefgCd

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/426479.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【bug】通过lora方式微调sdxl inpainting踩坑

报错内容 ValueError: Attempting to unscale FP16 gradients. 报错位置 if accelerator.sync_gradients:params_to_clip (itertools.chain(unet_lora_parameters, text_lora_parameters_one, text_lora_parameters_two)if args.train_text_encoderelse unet_lora_parameters…

SpringBoot:Web开发(基于SpringBoot使用MyBatis-Plus+JSP开发)

目录 前期准备 构建项目(IDEA2023.1.2,JDK21,SpringBoot3.3.3) 添加启动器 Model准备 这里我们利用MybatisX插件生成我们所需要的实体类、数据访问层以及服务层 注意选择MyBatis-Plus3以及Lombok 然后再在service接口中定义…

达梦数据库导入xml迁移到达梦数据库大文件导致中断问题解决方案记录?

问题:我将同事给我的xml文件迁移到盗梦数据库,xml文件大约2G,在导入过程中,总是导入一半都不到就失败了。 原因:我的原因是我的电脑的系统的运行内存是16G的,后来我发现在没导入之前,其他进程已…

android 老项目中用到的jar包不存在,通过离线的方法加载

1、之前的项目用的jar包,已经不在远程仓库中,只能手工去下载,并且安装。 // implementation com.github.nostra13:Android-Universal-Image-Loader // implementation com.github.lecho:hellocharts-android:v1.5.8 这…

Java进阶之集合框架(Set)

【基本内容】 二、Set接口(接上一章) Set是Java集合框架中不允许有重复元素的无序集合,其典型的实现类是HashSet,它完全是遵循Set接口特性规范实现的,无序且不允许元素重复;而Set接口下的实现类还有LinkedHashSet和TreeSort&#…

前后端分离Vue美容店会员信息管理系统o7grs

目录 技术栈介绍具体实现截图系统设计研究方法:设计步骤设计流程核心代码部分展示研究方法详细视频演示试验方案论文大纲源码获取 技术栈介绍 本课题的研究方法和研究步骤基本合理,难度适中,本选题是学生所学专业知识的延续,符合…

java项目之疫情下图书馆管理系统源码(springboot)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的疫情下图书馆管理系统。项目源码以及部署相关请联系风歌,文末附上联系信息。 项目简介: 疫情下图书馆管理系…

【OJ刷题】双指针问题6

这里是阿川的博客,祝您变得更强 ✨ 个人主页:在线OJ的阿川 💖文章专栏:OJ刷题入门到进阶 🌏代码仓库: 写在开头 现在您看到的是我的结论或想法,但在这背后凝结了大量的思考、经验和讨论 目录 1…

OpenAI o1——人工智能推理能力的飞跃,助力高级问题解决

前言 开放人工智能 新模型, OpenAI o1 或草莓,代表了 人工智能。它以 OpenAI 的 GPT 系列等先前模型为基础,并引入了增强的推理能力,从而加深了科学、编码和数学等各个领域的问题解决能力。与主要擅长处理和生成文本的前辈不同&a…

Pandas的入门操作-Series对象

Pandas的数据结构 Series对象 class pandas.Series(dataNone, indexNone) data参数 含义:data是Series构造函数中最主要的参数,它用来指定要存储在Series中的数据。 数据类型:data可以是多种数据类型,例如: Python 列…

【JavaEE初阶】多线程6(线程池\定时器)

欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎指出~ 目录 实例3:线程池 参数解释 核心线程数, 最大线程数 允许空闲的最大时间 ,时间单位 任务队列(阻塞队列) 线程工厂>工厂设计模式 拒绝策略 使用举例 模拟实现一个线…

leetcode:最高乘法得分

用auto可以过 class Solution { public:long long maxScore(vector<int>& a, vector<int>& b) {int n b.size();vector<vector<long long>> memo(4,vector<long long>(b.size(), LLONG_MIN));auto dfs [&](auto&& dfs, i…

构建自己的文生图工具:Python + Stable Diffusion + CUDA

构建自己的文生图工具&#xff1a;Python Stable Diffusion CUDA 前言概述环境搭建安装PyTorch安装Stable Diffusion编写Python代码结论结语 前言 在这个数字化和人工智能飞速发展的时代&#xff0c;图像生成技术正逐渐成为现实。想象一下&#xff0c;只需输入几个关键词&…

Nginx反向代理出现502 Bad Gateway问题的解决方案

&#x1f389; 前言 前一阵子写了一篇“关于解决调用百度翻译API问题”的博客&#xff0c;近日在调用其他API时又遇到一些棘手的问题&#xff0c;于是写下这篇博客作为记录。 &#x1f389; 问题描述 在代理的遇到过很多错误码&#xff0c;其中出现频率最高的就是502&#x…

【数据结构与算法 | 灵神题单 | 自顶向下DFS篇】力扣1022,623

1. 力扣1022&#xff1a;从根到叶的二进制之和 1.1 题目&#xff1a; 给出一棵二叉树&#xff0c;其上每个结点的值都是 0 或 1 。每一条从根到叶的路径都代表一个从最高有效位开始的二进制数。 例如&#xff0c;如果路径为 0 -> 1 -> 1 -> 0 -> 1&#xff0c;那…

OpenHarmony(鸿蒙南向开发)——标准系统方案之扬帆移植案例

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ OpenHarmony&#xff08;鸿蒙南向开发&#xff09;——轻量系统STM32F407芯片移植案…

SpringBoot---------Actuator监控

1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId> </dependency> 2、开启配置 management.endpoints.web.exposure.include* 3、启动项目&#xff0c;查看监控…

Linux·权限与工具-git与gdb

1. git工具 git是一款软件&#xff0c;发明它的人同时发明了Linux操作系统&#xff0c;也就是大名鼎鼎的Linus Torvalds 林纳斯托瓦兹。后来人们把git软件包装&#xff0c;产生了github、gitee等平台。 git产生的初衷就是便于进行多人协同管理&#xff0c;同时它还可以用来将本…

神经网络通俗理解学习笔记(3)注意力神经网络

Tansformer 什么是注意力机制注意力的计算键值对注意力和多头注意力自注意力机制注意力池化及代码实现Transformer模型Transformer代码实现BERT 模型GPT 系列模型GPT-1模型思想GPT-2模型思想GPT-3 模型思想 T5模型ViT模型Swin Transformer模型GPT模型代码实现 什么是注意力机制…

Linux基础开发环境(git的使用)

1.账号注册 git 只是一个工具&#xff0c;要想实现便捷的代码管理&#xff0c;就需要借助第三方平台进行操作&#xff0c;当然第三平台也是基于git 开发的 github 与 gitee 代码托管平台有很多&#xff0c;这里我们首选 Github &#xff0c;理由很简单&#xff0c;全球开发者…