Arduino入門:Stringクラス

ArduinoのStringクラスは、arduino-0019からコアに加えられた機能です。Stringクラスも従来の配列型と同じく文字列の操作が行えます。

Stringクラス

Stringクラスでも文字列の操作が行えますが、その利点と欠点等を以下にまとめてみます。

利点
配列型の文字列よりも複雑な連結、追加、置換、検索といった操作が可能です。

欠点
配列型より多くのメモリを消費します。

備考
ダブルクオーテーションマークで囲まれた文字列定数は、これまでどおり配列として処理されます。

Stringクラスの書式

Stringクラスのコンストラクタの書式は下記の通りです。コンストラクタとは、インスタンス(Stringクラスのオブジェクト)を生成する宣言と思えば良いでしょう。

数値からインスタンスを生成すると、その値(10進数)をASCII文字で表現したものになります。また、Syntax(書式)は2種類あり、base(基数)がある方は、様々なデータ型の値を何進数表記か選択して文字列化し、インスタンスを生成することができます。この場合、数値等のデータ型を何進数表記で文字列化する指定オプションが、base(基数)となります。

Stringクラスの使用例

次の例の様にしてStringクラスを使用する事が可能です。

Creative Commons Attribution-ShareAlike 3.0 License (CC BY-SA 3.0)
Arduino Reference:String-Object” by Arduino Team, used under CC BY-SA 3.0/ easy labo made some changes and comments to the original

(A) 文字列定数”easy labo”をStringクラスのオブジェクトstrBufAに代入しています。
(B) 文字定数’A’をStringクラスのオブジェクトstrBufBに代入しています。
(C) 文字列定数”StringC”をStringクラスのオブジェクトstrBufCに代入しています。
(D) をStringクラスのオブジェクトstrBufCと文字列定数” with more”を連結して、StringクラスのオブジェクトstrBufDに代入しています。
(E) 整数定数8をStringクラスのオブジェクトstrBufEに代入しています。strBufEの内容は、文字の’8’になります。
(F) analogRead(0)の10進数値を、StringクラスのオブジェクトstrBufFに文字列化して代入しています。
(G) 10進整数定数24の16進数値を、StringクラスのオブジェクトstrBufGに文字列化して代入しています。
(H) 10進整数定数128の2進数値を、StringクラスのオブジェクトstrBufHに文字列化して代入しています。
(I) millis()の戻り値(long型)の10進数値を、StringクラスのオブジェクトstrBufIに文字列化して代入しています。

Stringクラスの文字列操作関数

Stringクラスの魅力は、やはり豊富な文字列操作関数と言えます。次の例は、Stringクラスに用意されている文字列操作関数のサンプルです。

Creative Commons Attribution-ShareAlike 3.0 License (CC BY-SA 3.0)
Arduino Reference:String-Object” by Arduino Team, used under CC BY-SA 3.0/ easy labo made some changes and comments to the original

各々の関数の機能概要は次の通りです。
charAt(n) : n+1番目の文字要素を返します。
compareTo : 文字列を比較して、同じなら0を返します。
concat : 文字列を結合します。
c_str : ストリングクラスの文字列をC言語スタイルの文字配列+終端文字’\0’の形式に変換します。戻り値が、ポインタ渡しになりますので注意が必要です。
endsWith : 文字列の終わりから文字配列要素を比較し、等しければtrueを返します。
equals : 文字列を比較し、等しければtrueを返します。
equalsIgnoreCase : 大文字小文字を区別せずに文字列を比較し、等しければtrueを返します。
getBytes : 文字列をbyte型の配列にコピーします。上例のint lengthはbyte bufferのサイズです。
indexOf : 先頭から文字列を検索し、見つかった場合はそのインデックスを返します
lastIndexOf : 末尾から文字列を検索し、見つかった場合はそのインデックスを返します。
length : オブジェクトの文字数を返します。
remove : 文字列の一部を削除します。
replace : 文字列を置換します。
reserve : ストリング操作の為のメモリサイズ(byte)を指定する事が出来ます。
setCharAt : インデックスで指定した位置の文字を置き換えます。string長を超えたインデックスを指定した場合は無視されます。
startsWith : 先頭の文字列が指定文字列と等しい場合、trueを返します。
substring : 指定インデックスからの文字列の一部を返します。
toCharArray : 文字列をbyte型配列にコピーします。
toInt : 文字列をint型整数に変換します。文字列に整数以外が含まれる場合は実行されません。
toFloat :文字列をfloat型に変換します。文字列に数以外がある場合、その部分の処理が無視されます。
toLowerCase : 大文字を小文字に変換します。元の文字列は変化しません。
toUpperCase : 小文字を大文字に変換します。元の文字列は変化しません。
trim : 文字列の先頭と末尾の空白を削除します。

実際の使用方法については、上記サンプルコードを参考にして下さい。

Stringクラスの文字列操作演算子

Stringクラスの文字列操作演算子の使い方の例をあげておきます。

Creative Commons Attribution-ShareAlike 3.0 License (CC BY-SA 3.0)
Arduino Reference:String-Object” by Arduino Team, used under CC BY-SA 3.0/ easy labo made some changes and comments to the original

index : 配列と同じようにインデックスで文字にアクセスできます。インデックスは、0から始まります。
+ :文字列を連結します。string.concat()と同じです。
== :2つの文字列を比較し、一致するときはtrue、異なるときはfalseを返します。string.equals()と同じです。

まとめ

Stringオブジェクトを使用すると、文字列の複雑な操作が楽に行えます。ただし配列型より多くのメモリを消費しますので、文字列の操作が単純な場合は、配列を用いた方が良いと言えます。

→その他のArduino関連情報

Sponsored Link