Arduino で文字列を分割
このチュートリアルでは、Arduino の substring()
関数を使用して文字列を分割する方法について説明します。
Arduino で substring()
関数を使用して文字列を分割する
Arduino には、特定の文字列を分割するための組み込み関数 substring()
が用意されています。開始インデックス値と終了インデックス値を使用して文字列を分割できます。
substring()
関数には 2つの引数があります。最初の引数は、分割プロセスを開始する開始インデックス値であり、2 番目の引数は、分割プロセスが停止する終了インデックス値です。
構文:
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()
関数を使用して文字インデックスを見つけることもできます。関数のインデックスは 2つの引数を受け入れます。
最初の引数は必須であり、インデックスを検索する文字または文字列を表します。2 番目の引数はオプションであり、文字のインデックスを見つけるための開始インデックスを表します。
デフォルトでは、indexOf()
関数は最初から文字列の検索を開始して、指定された文字のインデックスを見つけますが、indexOf()
関数の 2 番目の引数を使用して、開始点としてインデックスを渡すこともできます。
構文:
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()
関数を使用することもできます。
2 番目の引数として、lastIndexOf()
関数内に開始インデックスを渡すこともできます。たとえば、3 行を含む文字列を分割し、最後の行を取得して、シリアルモニターウィンドウに表示してみましょう。
例:
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()
関数を使用しました。これは、指定された文字列に存在するテキストの最後の行のみを取得するためです。最初の 3 行は出力で指定された文字列であり、4 行目は文字列の分割の結果です。
length()
関数を使用して、substring()
内の終了インデックス値として使用される指定された文字列の長さを取得しました。ループがプロセスを繰り返すため、delay()
関数を使用してコード実行に遅延を追加しました。
分割を 1つだけ実行したい場合は、1 回だけ実行される setup()
関数内にコードを記述できます。
任意の文字に基づいて文字列を分割できます。indexOf()
関数を使用してインデックスを見つけるだけです。
substring()
関数を使用して文字列を分割できます。特定の文字列ですべての行を個別に取得したいとします。1 行を取得し、残りの文字列を変数に保存し、すべての行が抽出されるまでループを使用して同じ操作を再度実行する必要があります。