Arduino - 字符串对象


Arduino 编程中使用的第二种字符串类型是字符串对象。

什么是对象?

对象是包含数据和函数的构造。可以像变量一样创建 String 对象并为其分配值或字符串。String 对象包含对 String 对象中包含的字符串数据进行操作的函数(在面向对象编程 (OOP) 中称为“方法”)。

下面的草图和解释将清楚什么是对象以及 String 对象是如何使用的。

例子

void setup() { 
   String my_str = "This is my string.";
   Serial.begin(9600);

   // (1) print the string
   Serial.println(my_str);

   // (2) change the string to upper-case
   my_str.toUpperCase();
   Serial.println(my_str);

   // (3) overwrite the string
   my_str = "My new string.";
   Serial.println(my_str);

   // (4) replace a word in the string
   my_str.replace("string", "Arduino sketch");
   Serial.println(my_str);

   // (5) get the length of the string
   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的 String 对象,并为其赋予值“这是我的字符串。”。

这可以与创建一个变量并为其分配一个值(例如整数)进行比较 -

int my_var = 102;

草图按以下方式工作。

打印字符串

该字符串可以像字符数组字符串一样打印到串行监视器窗口。

将字符串转换为大写

创建的字符串对象 my_str 有许多可以对其进行操作的函数或方法。这些方法是通过使用对象名称后跟点运算符 (.) 和要使用的函数的名称来调用的。

my_str.toUpperCase();

toUpperCase ()函数对 String 类型的my_str对象中包含的字符串进行操作,并将该对象包含的字符串数据(或文本)转换为大写字符。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 挂起、崩溃或出现意外Behave。如果 Arduino 上的草图很小并且限制了对象的使用,那么应该没有问题。

字符数组字符串更难使用,您可能需要编写自己的函数来操作这些类型的字符串。优点是您可以控制所创建的字符串数组的大小,因此可以保持数组较小以节省内存。

您需要确保写入的内容不会超出字符串数组的数组边界。String 对象不存在这个问题,并且会为您处理字符串边界,前提是有足够的内存供其操作。当内存不足时,String 对象可以尝试写入不存在的内存,但永远不会覆盖它正在操作的字符串的末尾。

使用字符串的地方

在本章中,我们研究了字符串、它们在内存中的Behave及其操作。

当我们研究如何从串行监视器窗口获取用户输入并将输入保存在字符串中时,本课程的下一部分将介绍字符串的实际用途。