Arduino中使用的第二种类型的字符串是字符串对象。何为字符串对象呢?
什么是字符串对象
对象是同时包含函数和数据的结构,字符串对象可以像创建变量一样创建,并可以对其进行赋值。字符串对象包含对字符串对象数据进行操作的函数(在面向对象编程(object oriented programming, OOP)中称为“方法”)。
我们通过下面的例子来理解和说明字符串对象是什么以及如何使用:
void setup() { String my_str = "This is my string."; Serial.begin(9600); // (1) 打印输出字符串 Serial.println(my_str); // (2) 将字符串更改为大写 my_str.toUpperCase(); Serial.println(my_str); // (3) 重写字符串 my_str = "My new string."; Serial.println(my_str); // (4) 替换字符串中的一个单词 my_str.replace("string", "Arduino sketch"); Serial.println(my_str); // (5) 获取字符串的长度 Serial.print("String length is: "); Serial.println(my_str.length()); } void loop() { }
输出结果:
This is my string. THIS IS MY STRING. My new string. My new Arduino sketch. String length is: 22
工作原理
“ String my_str = “This is my string.” ; ” 创建一个名为my_str的字符串对象,并给它分配一个值为“This is my String .”。字符串对象可以像字符数组一样可以打印到串口监视器窗口。见示例代码(1)
将字符串转换为大写,创建的字符串对象 my_str 有许多可以对其进行操作的函数或方法。这些方法是通过使用对象名称后面跟着点操作符(.)和要使用的函数名称来调用的。“ my_str.toUpperCase(); ” toUpperCase() 函数的作用是:修改 my_str 对象中包含的字符串,该字符串类型为string,并将对象包含的字符串数据(或文本)转换为大写字符。String类包含的函数列表可以在 Arduino String reference中找到。从技术上讲,String被称为类,用于创建 String 对象。 见示例代码(2)
重写字符串, 赋值操作符(详见:Arduino-运算符-系列4)用于将一个新字符串赋值给需要替换的旧字符串的my_str对象,“ my_str = “My new string.” ; ” 赋值运算符“ = ”不能用于字符数组,只能用于赋值字符串对象。见示例代码(3)
替换字符串中的单词,replace() 函数的作用是:用传递给它的第二个字符串”Arduino sketch”替换传递给它的第一个字符串”string”。replace()是String类中的一个函数,因此可以在String对象 my_str 上直接使用。 见示例代码(4)
获取字符串的长度,使用 length() 可以很容易的获得字符串长度。在示例中,length() 返回的结果可以直接传递给 Serial.println(),而不需要使用中间变量。
什么时候使用字符串对象
字符串对象相比字符串和字符数组更容易使用,它具有可以很多对字符串进行操作的内置函数。
使用字符串对象的主要缺点是它会占用了大量的内存,错误的使用可能导致Arduino RAM容量的很快耗尽,最终导致Arduino挂起、崩溃或其它意外发生。如果Arduino上的 sketch 很小,并且优化了字符串对象的使用,那么也没有太大的问题。
使用字符数组来操作字符串相对困难,你可能需要编写函数来操作字符数组内的字符串。但这样做的好处是可以控制所创建的字符数组的大小,可以很好的控制字符数组的体积从而节省内存。
需要注意的是,使用字符数组时,数组内容不要超出数组边界。字符串对象没有字符边界的问题,前提是有足够的内存来供它操作。