当前位置: 首页 > news >正文

Lua字符串(包含任意字符,如中文)任意位置截取

常规的截取只需要lua自带的api就可以解决问题:如 string.sub
但是当字符串之中含有中文或者符号的时候,这些接口就麻爪了,当然lua后续更新有可能支持,至少本少当前的Lua版本是不支持的。

废话少说,直接上代码和测试用例

-- 判断utf8字符byte长度
function stringTool.chsize( char )if not char then--print("not char")return 0elseif char > 240 thenreturn 4elseif char > 225 thenreturn 3elseif char > 192 thenreturn 2elsereturn 1end
end--截取字符串,按字符截取
-- str:         要截取的字符串
-- startChar:   开始字符下标,1开始
-- numChars:    要截取的字符长度
function stringTool.GetStrSubStr( str, startChar, numChars )local startIndex = 1//1.获得从1到自定义的开始字符startChar之前有多少字符while startChar > 1 dolocal char = string.byte(str, startIndex)startIndex = startIndex + stringTool.chsize(char)startChar = startChar - 1endlocal currentIndex = startIndex//2.从自定义的开始到需要的长度下标有多少字符while numChars > 0 and currentIndex <= #str dolocal char = string.byte(str, currentIndex)currentIndex = currentIndex + stringTool.chsize(char)numChars = numChars -1end//3.根据两者下标对应的总字符长度获得需要截取的字符return str:sub(startIndex, currentIndex - 1), numChars
end

使用案例
local str1 = “测试打捞”
local str2 = “lq测试23ces”
local str3 = “65测试23ces”

log("测试11 = "…stringTool.GetStrSubStr(str1, 1, 1))
log("测试12 = "…stringTool.GetStrSubStr(str1, 2, 3))

log("测试21 = "…stringTool.GetStrSubStr(str2, 1, 3))
log("测试22 = "…stringTool.GetStrSubStr(str2, 1, 5))

log("测试31 = "…stringTool.GetStrSubStr(str3, 1, 4))
log("测试32 = "…stringTool.GetStrSubStr(str3, 2, 5))

打印:
测试11 = 测
测试12 = 试打
测试21 = lq测
测试22 = lq测试2
测试31 = 65测试
测试32 = 5测试2

参考原文链接:https://blog.csdn.net/u012685888/article/details/126961659

相关文章:

  • 新增模板中心和系统设置模块,支持飞书平台对接,DataEase开源数据可视化分析平台v2.1.0发布
  • Flink SQL: 高效解析 Kafka 数据并存储为 Parquet 至 HDFS
  • uni-app 微信小程序之好看的ui登录页面(四)
  • Kafka使用总结
  • 一、微前端目标、前端架构的前生今世、微前端架构优势和劣势、软件设计原则与分层
  • python socket编程9 - PyQt6界面实现UDP server/client 多客户端通讯的例子
  • docker的镜像创建 dockerfile
  • 【头歌-Python】Python第五章作业(初级)(7~16)
  • Mac安装DevEco Studio
  • 蓝牙配对、连接和删除汇总
  • AOP面向切面编程
  • 前端框架(Front-end Framework)和库(Library)的区别
  • Java接入ChatGPT接口简单示例
  • Android 11.0 systemui锁屏页面时钟显示样式的定制功能实现
  • 设计模式——建造者模式(创建型)
  • JavaScript 如何正确处理 Unicode 编码问题!
  • 【个人向】《HTTP图解》阅后小结
  • angular组件开发
  • CentOS从零开始部署Nodejs项目
  • co.js - 让异步代码同步化
  • cookie和session
  • HTML中设置input等文本框为不可操作
  • Java小白进阶笔记(3)-初级面向对象
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • Magento 1.x 中文订单打印乱码
  • PHP面试之三:MySQL数据库
  • Spring框架之我见(三)——IOC、AOP
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • 阿里云应用高可用服务公测发布
  • 大型网站性能监测、分析与优化常见问题QA
  • 回顾 Swift 多平台移植进度 #2
  • 利用jquery编写加法运算验证码
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 思考 CSS 架构
  • 微信小程序开发问题汇总
  • 学习JavaScript数据结构与算法 — 树
  • 追踪解析 FutureTask 源码
  • MyCAT水平分库
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • ​低代码平台的核心价值与优势
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (6)设计一个TimeMap
  • (C语言)共用体union的用法举例
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包