1

目录

  • 前言
  • 字符串基础
  • 字符串操作
  • 字符串转换
  • 高级字符串处理
  • 性能优化
  • 番外篇:Math常用的方法
  • 最后

前言

在HarmonyOS NEXT(下文简称HarmonyOS)应用开发中,对于数据处理是非常常见的操作,而且对于数据的处理也是我们在实际开发中必备技能,尤其是字符串相关的操作是最常用且重要的,而且对于字符串处理是一项基础且繁琐的事情。众所周知,字符串不仅用于用户界面显示,还用于数据传输、日志记录和本地化等多种场景,所以说字符串对于在HarmonyOS应用开发中至关重要,掌握字符串的操作和管理对于开发高效、易维护的应用也至关重要。那么本文就来深入分享关于在HarmonyOS开发中字符串相关的使用方法、技巧和实践的内容,方便查阅使用。

字符串基础

先来介绍一下在HarmonyOS开发中的字符串基础内容,虽然基础,但是非常重要。

1. 字符串定义

作为开发者想必都知道数据类型,字符串在各个开发语言中的类型都几乎一样,所以说在HarmonyOS中作用也是一样的,其实字符串通常使用String类表示,String类提供了丰富的方法来操作字符串。
image.png

2. 字符串字面量

String sting = "Hi, HarmonyOS";

3. 字符串不可变性

其实String类在HarmonyOS中是不可变的,也就是说一旦创建,其内容就不能被修改了。

字符串操作

对于字符串操作相关的内容,这里分享一些日常开发中常用的操作。

1. 连接字符串

关于字符串直接的拼接/链接,我们可以使用“+”运算符或者使用concat()连接字符串,具体如下所示:

String str1 = "Hi";
String str2 = "HarmonyOS";
String str3 = str1 + ", " + str2; // "Hi, HarmonyOS"

或者 使用concat(string1, string2, ...):返回连接后的字符串
String str4 = ", "
String str5 = str1.concat(str4, str2) // "Hi, HarmonyOS"

2. 字符串比较

常用的字符串比较,一般是使用equals()比较字符串内容是否相同,具体操作如下所示:

String str1 = "Hi";
String str2 = "Hi";
String str3 = "Harmony";
 // 使用equals()方法比较字符串
boolean isEqual1 = str1.equals(str2); // 返回true,说明字符串内容相同
boolean isEqual2 = str1.equals(str3); // 返回false,说明字符串内容不同

3. 字符串查找

使用indexOf、lastIndexOf和contains方法查找字符串中字符或子字符串的位置,具体如下:

String str1 = "Hi, HarmonyOS";
int index = str1.indexOf("Harmony"); // 7
boolean containsHarmony = str1.contains("Harmony"); // true

4.charAt使用

接下来介绍关于charAt使用,具体如下所示:

// 通过下标去取值
var str = 'sanzhanggui';
// 通过下标取值
var str2 = str.charAt(1);//"a"
// 若找不到,返回值是空串
var str3 = str.charAt(12);//""
// 如果直接是索引去取值,找不到,则返回是undefined
var str4 = str[12];//undefined

5.使用charCodeAt
接下来介绍关于使用charCodeAt的操作,具体如下所示:

// 通过下标取值对应的ascii码值
var str = 'chenzheng'; 
// 通过下标取值
var str2 = str.charCodeAt(0); //99   "c"==>ASCII码
console.log(str2);//99

6.indexOf/lastIndexOf

关于indexOf/lastIndexOf方法的使用,具体如下所示:
参数一:找的内容
参数二:开始找的位置(indexOf)/找到哪里终止(lastIndexOf)
(1)一个参数的情况indexOf

let str = 'sanzhanggui';
// 一个参数,在整个字符串中找
 let str  = str.indexOf("s");
// 返回值是找到的下标
console.log(str); 
lastIndexOf
var str = 'sanzhanggui';
// 在整个字符串中找最后一次出现的下标
 let str = str.lastIndexOf("h");
// 返回值是找到的下标
console.log(str);//4

(2)两个参数的情况:indexOf

var str = 'sanzhanggui';
// 从下标6开始找,找"h"
var str2 = str.indexOf("h",4);
// 返回值是找到的下标
console.log(str2);
lastIndexOf
var str = 'sanzhanggui';
// 从一开始截止到下标5,找"h"
var str3 = str.lastIndexOf("h",1);
// 返回值是找到的下标
console.log(str3);

7.slice

关于slice,它的作用:查找字符串中特定位置的字符。

参数:(n,m)
n:起始索引(包含), m结束索引(不包含)
返回值:查找的字符
从索引n(包括)开始查找到索引m(不包含)结束的字符
如果索引m不写,就是查找到最后;如果n只写一个0,或者不写就是复制一份

其实索引也可以为负数,转换成正数的规律:str.length+负的索引值
var str="sanzhanggui"
str.slice(1,3) // "an"
str.slice(0) //复制一份
str.slice() //复制一份
var res=str.slice(-3,-1);

8.substring(n,m)

个人觉得subString 和slice 基本都一样,唯一不同的点在于,subString 不支持负数索引,而slice支持负数索引,具体操作如下所示。

substr的作用:从索引n开始截取m个字符
参数:n,m(个数)
返回值:截取的字符串

substr的传参也支持从负索引开始
var str="sanzhanggui";
var res=str.substr(-3,2); //"gu"

9.toUpperCase()方法

toUpperCase()就是把字符串转换为大写。

10. toLowerCase()方法

toLowerCase();是把字符串转换为小写。

11.replace()

  • replace()作用:把字符串中某部分的字符替换成另一部分字符
  • replace()参数:(str1,str2)第一个参数代表的是要替换的字符或者是正则;第二个参数代表的是替换后的字符
  • replace()返回值:替换后的字符串
    简单示例如下所示:
let str = "san111san222san";
let str2 = str.replace("san","三");
console.log(str2) //"三111san222san"
let str3=str.replace(/san/g,"三");

12.split()方法

  • split()作用:按照指定的字符把字符串分割成数组
  • split()参数:分割符
  • split()返回值:分割后的数组
    split 和 join 对比使用,如下所示:
    var str="1-2-3-4-5-6";
    var str2 = str.split("-");
    console.log(str2); // ["1", "2", "3", "4", "5", "6"]

字符串转换

关于字符串的转换,这里分享一些常用场景。
1、字符串转换为整数
通过使用parseInt():把字符串转换为整数
let num1 = parseInt('123456'); //结果:123456
2、字符串转换为浮点数
通过使用parseFloat():把字符串转换为浮点数
let num2 = parseFloat('3.14') //结果:3.14
3、其他数据类型转为字符串
主要是通过toString():把其他数据类型转为字符串
let num3 = 123456;
let str = num3.toString(); //结果:'123456'
4、直接把其他数据类型与空字符串拼接。
let str2 = "" + num3;

高级字符串处理

1. 字符串的正则方法

字符串对象共有 4 个方法,可以使用正则表达式:match()、replace()、search()和split()。
但是新的语法出现之后,它在语言内部全部调用RegExp的实例方法,从而做到所有与正则相关的方法,全都定义在RegExp对象上。

  • String.prototype.match 调用 RegExp.prototype[Symbol.match]
  • String.prototype.replace 调用 RegExp.prototype[Symbol.replace]
  • String.prototype.search 调用 RegExp.prototype[Symbol.search]
  • String.prototype.split 调用 RegExp.prototype[Symbol.split]

    2. 字符的 Unicode 表示法

    Unicode 的支持,允许采用\uxxxx形式表示一个字符,其中xxxx表示字符的 Unicode 码点。

"\u0061"
// "a"

但是,这种表示法只限于码点在\u0000~\uFFFF之间的字符。超出这个范围的字符,必须用两个双字节的形式表示。


// "𠮷"

"\u20BB7"
// " 7"

性能优化

1. 字符串拼接

在循环中频繁拼接字符串会导致性能问题,使用关键字来优化。

2. 避免不必要的对象创建

合理使用字符串缓存和复用,避免不必要的字符串对象创建。

番外篇:Math常用的方法

关于Math,它被称之为数学函数,它也是对象类型数据,主要是用来操作数字的。
1、Math.abs() 求绝对值

Math.abs(-2)

2、Math.ceil/Math.floor 向上取整,向下取整

  • 向上取整,无论是正数还是负数,都取最大的值
  • 向下取整,无论是正数还是负数,都取最小的值
Math.ceil(1.2)
//结果:2

Math.ceil(-1.6)
//结果:-1

Math.floor(1.8)
//结果:1

Math.floor(-1.1)
//结果:-2

3、Math.round() 四舍五入
如果是正数,还是正常的逻辑,但是如果是负数,临界点必须大于3

Math.round(1.3)
//结果:2
Math.round(-1.3)
//结果:-1
Math.round(-1.31)
//结果:-2

4、Math.sqrt() 开平方

Math.sqrt(8)
//结果:2

5、Math.pow(n,m) 取幂,也就是n的m次幂

Math.pow(3,2) //结果:9

6、Math.PI

Math.PI
//结果:3.141592653589793

7、Math.max/Math.min 获取最大值和最小值
`Math.max(1,2,3,4)
Math.min(5,6,7,8)`

8、Math.random() 获取0~1 之间的随机数(大于等于0,小于1)
这里介绍获取n 到m 之间的随机数:Math.random()*(m-n)+n;

// 获取30 到40 之间的随机数
Math.random()*10+30

最后

通过上文关于HarmonyOS开发中字符串专辑的使用介绍,可以看到字符串处理是HarmonyOS开发中的一项基础且重要技能。熟练掌握字符串的基本操作、格式化、本地化和性能优化,开发者可以很好的开发出出更加健壮、高效和易维护的代码。个人觉得往往不太难的知识点往往需要开发者更加谨慎对待,因为要想做到熟练应用真的需要下一点功夫才行。最后,随着HarmonyOS生态的不断发展,想必开发者在日常开发中对字符串处理的需求和挑战也将不断增加,我们只有保持持续学习和实践,才是提升开发技能的关键。


灵芸小骏
9k 声望846 粉丝

移动开发者。