2025年Arduino里的字符串处理 上

Arduino里的字符串处理 上分析字符串 isAlphaNumer 判断是否为字母数字 isAlpha 判断是否为字母 isAscii 判断是否为 ASCII 码 isWhitespace 判断是否为空格符 isControl 判断是否为控制字符 isDigit 判断是否为数字

大家好,我是讯享网,很高兴认识大家。

分析字符串

isAlphaNumeric() // 判断是否为字母数字 isAlpha() // 判断是否为字母 isAscii() // 判断是否为 ASCII 码 isWhitespace() // 判断是否为空格符 isControl() // 判断是否为控制字符 isDigit() // 判断是否为数字 isGraph() // 判断是否为可打印的字符,不是空格 isLowerCase() // 判断是否为小写 isPrintable() // 判断是否为可打印的字符 isPunct() // 判断是否为标点符号 isSpace() // 判断是否为空格 isUpperCase() // 判断是否为大写 isHexadecimalDigit() // 判断是否为十六进制数字(i.e. 0 - 9, a - F, or A - F) 

讯享网

代码示例

讯享网/* * Arduino 中的字符处理 */ void setup() { 
    // 打开串口通信 Serial.begin(9600); while(!Serial){ 
    ; // 等待串口连接 } Serial.println("send any byte and i'll tell you everything I can about it"); Serial.println(); } void loop() { 
    // 获取输入的数据 if (Serial.available() > 0){ 
    int thisChar = Serial.read(); // 查看发送的内容 Serial.print("You sent me: \'"); Serial.print(thisChar); Serial.print("\' ASCII Value: "); Serial.println(thisChar); // 分析发送的内容 if(isAlphaNumeric(thisChar)){ 
    Serial.println("it's alphanumeric"); } if(isAlpha(thisChar)){ 
    Serial.println("it's a alphabetic"); } if(isAscii(thisChar)){ 
    Serial.println("it's ASCII"); } if(isWhitespace(thisChar)){ 
    Serial.println("it's whitespace"); } if(isControl(thisChar)){ 
    Serial.println("it's a control character"); } if(isDigit(thisChar)){ 
    Serial.println("it's a numeric digit"); } if(isGraph(thisChar)){ 
    Serial.println("it's a printable charcater that's not whitespace"); } if(isLowerCase(thisChar)){ 
    Serial.println("it's lower case"); } if (isPrintable(thisChar)) { 
    Serial.println("it's printable"); } if (isPunct(thisChar)) { 
    Serial.println("it's punctuation"); } if (isSpace(thisChar)) { 
    Serial.println("it's a space character"); } if (isUpperCase(thisChar)) { 
    Serial.println("it's upper case"); } if (isHexadecimalDigit(thisChar)) { 
    Serial.println("it's a valid hexadecimaldigit (i.e. 0 - 9, a - F, or A - F)"); } // 添加一些空格并要求另外的字符 Serial.println(); Serial.println("Give me anther byte"); Serial.println(); } } 

字符串相加

字符串可以和(长)整数常量,(长)整数变量,字符,字符串相加,代码如下所示:

/* * 字符相加 */ String stringOne = String("You added "); String stringTwo = String("this string"); String stringThree = String(); void setup() { Serial.begin(9600); Serial.println("\n\nAdding Strings together (concatenation):"); Serial.println(); } void loop() { // 字符串与整数常量相加 stringThree = stringOne + 123; Serial.println(stringThree); // 字符串与长整数常量相加 stringThree = stringOne + ; Serial.println(stringThree); // 字符串与字符常量相加 stringThree = stringOne + 'A'; Serial.println(stringThree); // 字符串与字符串相加 stringThree = stringOne + "abc"; Serial.println(stringThree); stringThree = stringOne + stringTwo; Serial.println(stringThree); // 字符串与整数变量相加 stringOne = "Sensor value: "; stringThree = stringOne + analogRead(A0); Serial.println(stringThree); // 字符串与长整数变量相加 stringOne = "millis() value: "; stringThree = stringOne + millis(); Serial.println(stringThree); while(true); } 

输出的结果

img
讯享网

添加字符串

使用 += 运算符和 concat() 方法将(长)整数常量,(长)整数变量,字符,字符串添加到字符串中去,代码如下所示:

讯享网/* * 添加字符串 */ String stringOne = String("Sensor "); String stringTwo = String("value"); void setup() { 
    Serial.begin(9600); Serial.println("\n\nAppending to a String:"); Serial.println(); } void loop() { 
    Serial.println(stringOne); // 添加一个字符串 stringOne += stringTwo; Serial.println(stringOne); stringOne += " for input "; Serial.println(stringOne); // 添加一个字符 stringOne += 'A'; Serial.println(stringOne); // 添加一个整数常量 stringOne += 0; Serial.println(stringOne); // 添加一个整数变量 stringOne += analogRead(A0); Serial.println(stringOne); Serial.println("\n\nchanging the Strings' values"); stringOne = "A long integer: "; stringTwo = "The millis(): "; // 使用 concat() 来为子妇产添加一个长变量 stringTwo.concat(millis()); Serial.println(stringTwo); while(true); } 

输出结果

img

改变字符串的大小写

可以使用 toUpperCasetoLowerCase 来分别改变字符串的大写和小写。只有字符 A-Z 或 a-z 受到影响,代码示例如下所示:

/* * 改变字符串的大小写 */ void setup() { 
    Serial.begin(9600); Serial.println("\n\nString case changes:"); Serial.println(); } void loop() { 
    // 将所有字母更改为大写 String stringOne = "<html><head><body>"; Serial.println(stringOne); stringOne.toUpperCase(); Serial.println(stringOne); // 将所有字母更改为小写 String stringTwo = "</BODY></HTML>"; Serial.println(stringTwo); stringTwo.toLowerCase(); Serial.println(stringTwo); while (true); } 

输出结果

img

设定字符串中的值

字符串函数 charAt() 用于获取字符串中给定位置的字符值, setCharAt() 用于设置字符串中给定位置的字符值。代码示例如下:

讯享网/* * 设定字符串中的值 */ void setup() { 
    Serial.begin(9600); Serial.println("\n\nString charAt() and setCharAt():"); } void loop() { 
    // 打印传感器读数 String reportString = "SensorReading: 456"; Serial.println(reportString); // 读数的最高位数位于 reportString 中的第15位  char mostSignificantDigit = reportString.charAt(15); String message = "Most significant digit of the sensor reading is: "; Serial.println(message + mostSignificantDigit); Serial.println(); // 将位置13 的“:” 改成 “=” reportString.setCharAt(13, '='); Serial.println(reportString); while(true); } 

输出结果

img

比较字符串

字符串的中比较运算符有:==!=><>=<= 以及 equals() 方法和 equalsIgnoreCase()方法。这些运算允许在字符串之间进行字母比较。它们对于排序和按字母顺序排序很有用。

其中 ==equals() 执行相同的操作:

if(stringOne.equals(stringTwo)){ 
   } 
讯享网if (stringOne == stringTwo) {} 

>(大于)和 <(小于)运算符按字母顺序在两者不同的第一个字符上比较字符串。因此,有“a”<“b”“1”<“2”,但 “999”>“1000” 因为 9 比 1 大。

所以,需要注意的是,在比较数字字符串时,字符串比较运算符可能会造成混淆,因为数字被视为字符串而不是数字。如果需要比较数字,请将它们转换为整数,浮点数或长整数,而不是字符串。

获取字符的索引

indexOf() 用来获取字符串中指定字符的索引; lastIndexOf()用来倒序获取指定字符的索引。如何想要获得当前字符第二个索引,可以使用第一个结束位置的索引,并从进行 + 1搜索作为偏移量;倒序的话,进行 -1 操作。需要注意的是,得到的结果都是正向排序的结果,代码示例如下:

/* * 获取字符串的索引 */ String stringOne = String("Hello Hello"); String stringTwo = String(); String stringThree = String(); void setup() { Serial.begin(9600); } void loop() { // 获取第一个“e”的索引 int e = stringOne.indexOf('e'); stringTwo = " the first e's index is: "; stringThree = stringTwo + e; Serial.println(stringThree); // 获取第二个“e”的索引 int second_e = stringOne.indexOf('e', e + 1); stringTwo = " the second e's index is: "; stringThree = stringTwo + second_e; Serial.println(stringThree); // 倒序获得倒数第一个“o”的索引 int last_o = stringOne.lastIndexOf('o'); stringTwo = " the last o's index is: "; stringThree = stringTwo + last_o; Serial.println(stringThree); // 倒序获得倒数第二个 “o”的索引 int last_second_o = stringOne.lastIndexOf('o', last_o -1); stringTwo = " the last second o's index is: "; stringThree = stringTwo + last_second_o; Serial.println(stringThree); while(true); } 

输出结果

img

获取字符串的长度及消除额外元素

使用 length() 可以获得字符串的长度,使用 trim() 可以消除多余的空白格,代码示例如下:

讯享网/* * 获取字符串的长度 */ void setup() { Serial.begin(9600); } void loop() { String stringOne = String(" Hello World! "); Serial.println(stringOne); // 获取字符串的长度 Serial.print("Length: "); Serial.println(stringOne.length()); // 消除空格后,打印响度 stringOne.trim(); Serial.println(stringOne); Serial.print("Length: "); Serial.println(stringOne.length()); // 避免无限打印 while(true); } 

输出结果

img

替换字符串中的字符

使用 replace() 可以替换字符串中的字符,代码示例如下:

/* * 替换字符串中的字符 */ void setup() { Serial.begin(9600); } void loop() { String stringOne = String("Hello world"); Serial.println(stringOne); // 将“world”替换成 “arduino” String stringTwo = stringOne; stringTwo.replace("world", "arduino"); Serial.println(stringTwo); // 避免无限打印 while(true); } 

输出结果

img

检查首尾字符

可以用 startsWith()endWith() 来检查一个字符串是否符合要求,代码示例如下所示:

讯享网/* * 检查字符串的首尾字符 */ void setup() { 
    Serial.begin(9600); } void loop() { 
    String stringOne = String("Hello World"); Serial.println(stringOne); // 确认首字符 if(stringOne.startsWith("Hello")){ 
    Serial.println("Yes"); } // 确认尾字符 if(stringOne.endsWith("World")){ 
    Serial.println("Yes"); } while(true); } 

输出结果

img

查找子字符串

substring()charAt()startsWith()endsWith() 密切相关。它允许查找给定字符串中特定子字符串的实例。

void setup() { 
    Serial.begin(9600); } void loop() { 
    String stringOne = "Content-Type: text/html"; Serial.println(stringOne); // substring(index)查找从索引位置到结尾的子字符串 if (stringOne.substring(19) == "html") { 
    Serial.println("It's an html file"); } // 在字符串中间查找子字符串 if (stringOne.substring(14, 18) == "text") { 
    Serial.println("It's a text-based file"); } while (true); } 

输出结果

img

字符串转换成整数

使用 toInt() 可以将字符串转换成整数。下面代码是将接受到的字符串中的整数字符转换成整数:

讯享网/* * 字符串转换为整数 */ String inString = ""; void setup() { 
    Serial.begin(9600); } void loop() { 
    // 读取串口的输入: while(Serial.available() > 0){ 
    int inChar = Serial.read(); // 判断输入的是否为数字 if(isDigit(inChar)){ 
    // 将传入的字节转换为字符并将其添加到字符串 inString += (char)inChar; } // 如果有新的一行的话,打印字符串和字符串的值 if(inChar == '\n'){ 
    Serial.print("Value: "); Serial.println(inString.toInt()); Serial.print("String: "); Serial.println(inString); // 清空字符串 inString = ""; } } } 

转自:
作者:caoqi95
链接:https://www.jianshu.com/p/5d4c5f318b73

小讯
上一篇 2025-04-08 16:23
下一篇 2025-02-22 10:07

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/47687.html