Arduino中使用的第二種類型的字符串是字符串對(duì)象。何為字符串對(duì)象呢?
什么是字符串對(duì)象

對(duì)象是同時(shí)包含函數(shù)和數(shù)據(jù)的結(jié)構(gòu),字符串對(duì)象可以像創(chuàng)建變量一樣創(chuàng)建,并可以對(duì)其進(jìn)行賦值。字符串對(duì)象包含對(duì)字符串對(duì)象數(shù)據(jù)進(jìn)行操作的函數(shù)(在面向?qū)ο缶幊?object oriented programming, OOP)中稱為“方法”)。
我們通過下面的例子來理解和說明字符串對(duì)象是什么以及如何使用:
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) 替換字符串中的一個(gè)單詞 my_str.replace("string", "Arduino sketch"); Serial.println(my_str); // (5) 獲取字符串的長(zhǎng)度 Serial.print("String length is: "); Serial.println(my_str.length()); } void loop() { }
輸出結(jié)果:
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.” ; ” 創(chuàng)建一個(gè)名為my_str的字符串對(duì)象,并給它分配一個(gè)值為“This is my String .”。字符串對(duì)象可以像字符數(shù)組一樣可以打印到串口監(jiān)視器窗口。見示例代碼(1)
將字符串轉(zhuǎn)換為大寫,創(chuàng)建的字符串對(duì)象 my_str 有許多可以對(duì)其進(jìn)行操作的函數(shù)或方法。這些方法是通過使用對(duì)象名稱后面跟著點(diǎn)操作符(.)和要使用的函數(shù)名稱來調(diào)用的。“ my_str.toUpperCase(); ” toUpperCase() 函數(shù)的作用是:修改 my_str 對(duì)象中包含的字符串,該字符串類型為string,并將對(duì)象包含的字符串?dāng)?shù)據(jù)(或文本)轉(zhuǎn)換為大寫字符。String類包含的函數(shù)列表可以在 Arduino String reference中找到。從技術(shù)上講,String被稱為類,用于創(chuàng)建 String 對(duì)象。 見示例代碼(2)
重寫字符串, 賦值操作符(詳見:Arduino-運(yùn)算符-系列4)用于將一個(gè)新字符串賦值給需要替換的舊字符串的my_str對(duì)象,“ my_str = “My new string.” ; ” 賦值運(yùn)算符“ = ”不能用于字符數(shù)組,只能用于賦值字符串對(duì)象。見示例代碼(3)
替換字符串中的單詞,replace() 函數(shù)的作用是:用傳遞給它的第二個(gè)字符串”Arduino sketch”替換傳遞給它的第一個(gè)字符串”string”。replace()是String類中的一個(gè)函數(shù),因此可以在String對(duì)象 my_str 上直接使用。 見示例代碼(4)
獲取字符串的長(zhǎng)度,使用 length() 可以很容易的獲得字符串長(zhǎng)度。在示例中,length() 返回的結(jié)果可以直接傳遞給 Serial.println(),而不需要使用中間變量。
什么時(shí)候使用字符串對(duì)象
字符串對(duì)象相比字符串和字符數(shù)組更容易使用,它具有可以很多對(duì)字符串進(jìn)行操作的內(nèi)置函數(shù)。
使用字符串對(duì)象的主要缺點(diǎn)是它會(huì)占用了大量的內(nèi)存,錯(cuò)誤的使用可能導(dǎo)致Arduino RAM容量的很快耗盡,最終導(dǎo)致Arduino掛起、崩潰或其它意外發(fā)生。如果Arduino上的 sketch 很小,并且優(yōu)化了字符串對(duì)象的使用,那么也沒有太大的問題。
使用字符數(shù)組來操作字符串相對(duì)困難,你可能需要編寫函數(shù)來操作字符數(shù)組內(nèi)的字符串。但這樣做的好處是可以控制所創(chuàng)建的字符數(shù)組的大小,可以很好的控制字符數(shù)組的體積從而節(jié)省內(nèi)存。
需要注意的是,使用字符數(shù)組時(shí),數(shù)組內(nèi)容不要超出數(shù)組邊界。字符串對(duì)象沒有字符邊界的問題,前提是有足夠的內(nèi)存來供它操作。