Arduino - 字符串对象
Arduino 编程中使用的第二种字符串类型是字符串对象。
什么是对象?
对象是包含数据和函数的构造。可以像变量一样创建字符串对象并为其分配值或字符串。字符串对象包含函数(在面向对象编程 (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."。
这可以与创建一个变量并为其分配一个值(例如整数 −)进行比较。
int my_var = 102;
草图的工作方式如下。
打印字符串
字符串可以像字符数组字符串一样打印到串行监视器窗口。
将字符串转换为大写
创建的字符串对象 my_str 具有许多可对其操作的函数或方法。这些方法是通过使用对象名称后跟点运算符 (.) 以及要使用的函数名称来调用的。
my_str.toUpperCase();
toUpperCase() 函数对 my_str 对象中包含的字符串进行操作,该对象属于 String 类型,并将对象包含的字符串数据(或文本)转换为大写字符。String 类包含的函数列表可在 Arduino String 参考中找到。从技术上讲,String 称为类,用于创建 String 对象。
覆盖字符串
赋值运算符用于将新字符串分配给 my_str 对象以替换旧字符串
my_str = "My new string。" ;
赋值运算符不能用于字符数组字符串,只能用于 String 对象。
替换字符串中的单词
replace() 函数用于将传递给它的第一个字符串替换为传递给它的第二个字符串。replace() 是 String 类中内置的另一个函数,因此可用于 String 对象 my_str。
获取字符串的长度
使用 length() 可以轻松获取字符串的长度。在示例草图中,length() 返回的结果直接传递给 Serial.println(),而无需使用中间变量。
何时使用字符串对象
String 对象比字符串字符数组更容易使用。该对象具有内置函数,可以对字符串执行许多操作。
使用 String 对象的主要缺点是它占用大量内存,并且会很快耗尽 Arduino 的 RAM 内存,这可能会导致 Arduino 挂起、崩溃或出现意外行为。如果 Arduino 上的草图很小并且限制了对象的使用,那么应该不会有问题。
字符数组字符串更难使用,您可能需要编写自己的函数来操作这些类型的字符串。优点是您可以控制创建的字符串数组的大小,因此您可以将数组保持在较小大小以节省内存。
您需要确保不要使用字符串数组写入超出数组边界的内容。String 对象没有这个问题,并且会为您处理字符串边界,前提是有足够的内存供其操作。当内存不足时,String 对象可以尝试写入不存在的内存,但绝不会覆盖正在操作的字符串的末尾。
字符串的使用位置
在本章中,我们研究了字符串、它们在内存中的行为及其操作。
本课程的下一部分将介绍字符串的实际用途,届时我们将研究如何从串行监视器窗口获取用户输入并将输入保存在字符串中。