HarmonyOS StrUtil 字符串处理实战:trim 去空格、replace 替换、大小写转换全攻略

HarmonyOS StrUtil 字符串处理实战:trim 去空格、replace 替换、大小写转换全攻略

文章目录

    • 背景
      • 方法总览
      • trim vs trimAll:只是名字像而已
      • toStr:把任何东西转成字符串
      • replace vs replaceAll:支持正则的字符串替换
      • startsWith / endsWith:判断字符串开头结尾
      • repeat:字符串重复
      • 大小写三件套:toLower、toUpper、capitalize
      • equal / notEqual:字符串比较
      • 写在最后

背景

近期发现一款很有意思的HarmonyOS 三方库, 地址 @pura/harmony-utils(V1.4.0) , 作者是"桃花镇童长老", 我这里也是直接通过该作者公布的源码进行案例编写进行,写了到目前写了一部分demo ,感觉确实很有帮助,这里呢也是开始写一个系列的演示demo 供大家参考。如有帮助可以在OpenHarmony中进行下载安装进行使用哦

案例demo导航展示

↓↓↓↓↓↓接下来言归正传 ↓↓↓↓
字符串处理是日常开发里频率最高的操作之一。这篇文章专门聊 StrUtil 里那几个"最常用"的方法:trimtrimAllreplacereplaceAll,以及大小写转换三件套toLowertoUppercapitalize

代码很简单,但有几个细节值得注意。

方法总览

trim vs trimAll:只是名字像而已

这两个方法都是"去空格",但去的范围完全不同。

trim():只去掉字符串两端的空格,中间的空格保留。

trimAll():把字符串里所有空格都干掉,包括中间的。

// Demo 中的实际代码this.Btn('trim() 去除两端空格','#27AE60',()=>{constv=StrUtil.trim(this.inputStr);this.addLog(`trim("${this.inputStr}") → "${v}"`);})this.Btn('trimAll() 去除所有空格','#1E8449',()=>{constv=StrUtil.trimAll(this.inputStr);this.addLog(`trimAll("${this.inputStr}") → "${v}"`);})

假设this.inputStr" Hello HarmonyOS "(两端有空格):

  • trim(" Hello HarmonyOS ")"Hello HarmonyOS"(两端空格去掉,中间保留)
  • trimAll(" Hello HarmonyOS ")"HelloHarmonyOS"(所有空格都没了)

什么时候用哪个?

  • 处理用户输入的文本框内容,一般用trim(),保留单词间的空格
  • 处理纯数字、手机号、验证码等不应含空格的字段,用trimAll()更保险

toStr:把任何东西转成字符串

toStr这个方法很实用,它能把nullundefined、数字、布尔值统统转成字符串,还能设置默认值。

this.Btn('toStr(null) → 默认空串','#F39C12',()=>{this.addLog(`toStr(null) → "${StrUtil.toStr(null)}"`);})this.Btn('toStr(123)','#F39C12',()=>{this.addLog(`toStr(123) → "${StrUtil.toStr(123)}"`);})this.Btn('toStr(true)','#F39C12',()=>{this.addLog(`toStr(true) → "${StrUtil.toStr(true)}"`);})this.Btn('toStr(undefined, "N/A")','#F39C12',()=>{this.addLog(`toStr(undefined,"N/A") → "${StrUtil.toStr(undefined,'N/A')}"`);})

实际运行结果

  • toStr(null)""(默认返回空字符串)
  • toStr(123)"123"
  • toStr(true)"true"
  • toStr(undefined, "N/A")"N/A"(第二个参数是默认值)

这个方法在渲染列表数据时特别好用,避免了null.toString()报错的问题。

replace vs replaceAll:支持正则的字符串替换

两个替换方法的区别跟 JavaScript 原生的行为类似:

replace():只替换第一个匹配项。但它支持正则表达式!

replaceAll():替换所有匹配项,通常传字符串。

this.Btn('replace("Hello HarmonyOS","HarmonyOS","World")','#E67E22',()=>{constv=StrUtil.replace('Hello HarmonyOS World','HarmonyOS','ArkTS');this.addLog(`replace → "${v}"`);})this.Btn('replaceAll("aabbcc","b","X")','#E67E22',()=>{constv=StrUtil.replaceAll('aabbcc','b','X');this.addLog(`replaceAll("aabbcc","b","X") → "${v}"`);})this.Btn('replace() 正则替换数字','#D35400',()=>{constv=StrUtil.replace('abc123def456',/\d+/,'NUM');this.addLog(`replace("abc123def456", /\\d+/) → "${v}"`);})

实际运行结果

  • replace('Hello HarmonyOS World', 'HarmonyOS', 'ArkTS')"Hello ArkTS World"
  • replaceAll('aabbcc', 'b', 'X')"aaXXcc"(两个 b 都换了)
  • replace('abc123def456', /\d+/, 'NUM')"abcNUMdef456"(只替换第一串数字)

注意正则替换那个例子,/\d+/只匹配到第一串连续数字123就停了,456没被替换。如果想替换所有数字,要用/\d+/g全局标志。

startsWith / endsWith:判断字符串开头结尾

这两个方法很直观:

this.Btn(`startsWith("${this.inputStr.trim()}", "Hello")`,'#16A085',()=>{consts=this.inputStr.trim();this.addLog(`startsWith("${s}","Hello") →${StrUtil.startsWith(s,'Hello')}`);})this.Btn(`endsWith("${this.inputStr.trim()}", "OS")`,'#16A085',()=>{consts=this.inputStr.trim();this.addLog(`endsWith("${s}","OS") →${StrUtil.endsWith(s,'OS')}`);})

实际运行结果(inputStr 去掉首尾空格后是"Hello HarmonyOS"):

  • startsWith("Hello HarmonyOS", "Hello")true
  • endsWith("Hello HarmonyOS", "OS")true

这两个方法在路由判断、文件类型判断场景很常用,比判断indexOf更直观。

repeat:字符串重复

需要生成重复字符串的时候用,比如生成分隔线、填充占位符:

this.Btn(`repeat("Ha",${this.inputRepeat})`,'#2471A3',()=>{constv=StrUtil.repeat('Ha',this.inputRepeat);this.addLog(`repeat("Ha",${this.inputRepeat}) → "${v}"`);})

repeat("Ha", 3)"HaHaHa"

大小写三件套:toLower、toUpper、capitalize

this.Btn('toLower("Hello World")','#5D6D7E',()=>{this.addLog(`toLower("Hello World") → "${StrUtil.toLower('Hello World')}"`);})this.Btn('toUpper("hello world")','#5D6D7E',()=>{this.addLog(`toUpper("hello world") → "${StrUtil.toUpper('hello world')}"`);})this.Btn('capitalize("hELLO") → 首字母大写其余小写','#5D6D7E',()=>{this.addLog(`capitalize("hELLO") → "${StrUtil.capitalize('hELLO')}"`);})

实际运行结果

  • toLower("Hello World")"hello world"(全小写)
  • toUpper("hello world")"HELLO WORLD"(全大写)
  • capitalize("hELLO")"Hello"(首字母大写,其余全小写)

capitalize要注意:它不是"首字母大写、其余不变",而是"首字母大写、其余全转小写"。如果你传"hELLO",结果是"Hello"而不是"hELLO"首字母大写的"HELLO"

equal / notEqual:字符串比较

这两个方法做的是严格相等判断:

this.Btn('equal("abc","abc")','#884EA0',()=>{this.addLog(`equal("abc","abc") →${StrUtil.equal('abc','abc')}`);})this.Btn('equal("abc","ABC")','#884EA0',()=>{this.addLog(`equal("abc","ABC") →${StrUtil.equal('abc','ABC')}`);})this.Btn('notEqual(1, 2)','#76448A',()=>{this.addLog(`notEqual(1, 2) →${StrUtil.notEqual(1,2)}`);})

实际运行结果

  • equal("abc","abc")true
  • equal("abc","ABC")false(大小写不同)
  • notEqual(1, 2)true(1 不等于 2)

注意notEqual支持非字符串类型的比较,传数字也没问题。

写在最后

这篇覆盖了 StrUtil 最高频的一批方法。几个要记住的点:

  1. trim去两端,trimAll去全部
  2. replace只替换第一个,但支持正则;replaceAll全替换
  3. capitalize是首字母大写 + 其余小写,不是单纯首字母大写

下一篇聊 StrUtil 的编码转换:字符串和 Uint8Array、Base64、十六进制之间的互转。