在 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