分析字符串
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 + 123456789;
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);
}
輸出的結果:
添加字符串
使用 +=
運算符和 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);
}
輸出結果:
改變字符串的大小寫
可以使用 toUpperCase
和 toLowerCase
來分別改變字符串的大寫和小寫。只有字符 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);
}
輸出結果:
設定字符串中的值
字符串函數 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);
}
輸出結果:
比較字符串
字符串的中比較運算符有:==
,!=
,>
,<
,>=
,<=
以及 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);
}
輸出結果:
獲取字符串的長度及消除額外元素
使用 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);
}
輸出結果:
替換字符串中的字符
使用 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);
}
輸出結果:
檢查首尾字符
可以用 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);
}
輸出結果:
查找子字符串
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);
}
輸出結果:
字符串轉換成整數
使用 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