在 Arduino 中拆分字串

Ammar Ali 2022年12月21日 2022年4月20日
在 Arduino 中拆分字串

本教程將討論使用 Arduino 中的 substring() 函式拆分字串。

在 Arduino 中使用 substring() 函式拆分字串

Arduino 提供了一個內建函式 substring() 來拆分給定的字串。我們可以使用開始和結束索引值拆分字串。

substring() 函式有兩個引數。第一個引數是我們要開始拆分過程的起始索引值,第二個引數是拆分過程將停止的結束索引值。

語法:

Sub_string = MyString.substring(from, to);

變數 Sub_string 將包含 substring() 函式的輸出,而 MyString 變數將包含我們要拆分的原始字串。from 變數包含起始索引,to 變數包含結束索引。

讓我們定義一個字串並使用 substring() 函式將其拆分,然後將其列印在 Arduino 的序列監視器上。

例子:

String My_S = "hello world";

void setup(){
    Serial.begin(9600);
}
void loop(){
    String sub_S = My_S.substring(0,5);
    Serial.println(sub_S);
    delay(1000);
}

輸出:

hello

在上面的程式碼中,Serial.println() 函式在 Arduino 的序列監視器上列印結果。字串拆分將從 0 開始,包括 0 索引字元,並在索引 5 結束,不包括索引 5 處的字元。

我們還可以使用 Arduino 的 indexOf() 函式找到字元索引。函式的索引接受兩個引數。

第一個引數是強制性的,表示我們要查詢其索引的字元或字串。第二個引數是可選的,它表示查詢字元索引的起始索引。

預設情況下,indexOf() 函式從頭開始搜尋字串以查詢給定字元的索引,但我們也可以使用 indexOf() 函式的第二個引數傳遞一個索引作為起點。

語法:

int index = MyString.indexOf(val, from);

index 變數將儲存 val 變數索引,該索引包含上述程式碼中的字元或字串。from 變數定義了用作查詢給定字元索引的起點的起始索引。

當我們不知道要傳入 substring() 的字元索引時,我們使用 indexOf() 函式。

例如,如果我們想使用空格字元作為結束索引來分割給定的字串,我們可以使用 indexOf() 函式找到空格字元的索引,然後在 substring() 函式中使用它拆分字串。

如果在給定字串中找不到索引,indexOf() 函式將返回 -1。

例子:

String My_S = "hello world";

void setup(){
  Serial.begin(9600);
}
void loop(){
    int index = My_S.indexOf(' ');
    String sub_S = My_S.substring(0,index);
    Serial.println(index);
    Serial.println(sub_S);
    delay(1000);
}

輸出:

5
hello

在上面的程式碼中,變數 index 包含給定字串中存在的空格字元的索引。如你所見,我們在序列監視器視窗上顯示了索引和字串拆分的結果。

我們還可以根據行數拆分字串。

例如,如果一個字串包含多行文字,我們想要拆分並將每一行作為一個單獨的字串。

我們可以使用 indexOf('\n') 函式來查詢新行的索引並相應地拆分給定的字串。

indexOf() 函式從給定字串的開頭開始搜尋索引。但是,我們也可以使用 lastIndexOf() 函式,它從字串末尾開始搜尋索引。

作為第二個引數,我們還可以在 lastIndexOf() 函式中傳遞起始索引。例如,讓我們拆分一個包含三行的字串,獲取最後一行,並將其顯示在序列監視器視窗上。

例子:

String My_S = "hello world\nGreetings\nPeople";

void setup(){
    Serial.begin(9600);
    Serial.println(My_S);
}
void loop(){
    int index = My_S.lastIndexOf('\n');
    int length = My_S.length();
    String sub_S = My_S.substring(index, length);
    Serial.println(sub_S);
    delay(100000);
}

輸出:

hello world
Greetings
People

People

我們在上面的程式碼中使用了 lastIndexOf() 函式,因為我們只想獲取給定字串中存在的最後一行文字。前三行是輸出中給定的字串,第四行是字串拆分的結果。

我們使用 length() 函式來獲取給定字串的長度,該長度將用作 substring() 中的結束索引值。我們使用 delay() 函式在程式碼執行中新增一些延遲,因為迴圈將重複該過程。

如果我們只想進行拆分,我們可以在 setup() 函式中編寫程式碼,該函式只執行一次。

我們可以根據任何字元拆分字串。我們只需要使用 indexOf() 函式找到它的索引。

我們可以使用 substring() 函式拆分字串。假設我們想分別獲取給定字串中的所有行。我們必須獲取一行,將剩餘的字串儲存在一個變數中,然後使用迴圈再次執行相同的操作,直到提取所有行。

Author: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook

相關文章 - Arduino String