◆PROCESSING 逆引きリファレンス
カテゴリー:文字関連処理
文字の連結と分割
【解説】
PROCESSINGで文字列を扱う際にはString オブジェクトを使うのが便利です。Stringオブジェクトは文字と文字を連結したり、分割する事が簡単に行えます。
String文字列同士の連結には + 記号を使います。
String文字列を任意の区切り文字で分割するには、Stringオブジェクトが持つ split メソッドを利用します。
【構文】
連結: String + String
分割: String.split( String regex, int limit );
【パラメータ】
String regex : 分割文字
int limit : 分割回数
【戻り値】
連結: String
分割: String[] 配列
【注意】
limit パラメータは、分割回数です。与えられた文字列をregexでlimit -1 回分割した、個々の文字列を含むString配列が戻されます。
●limit がゼロより大きい場合
分割が limit – 1回以下だけ繰り返されます。戻される配列の長さは limit 以下になります。配列の最後の要素には、最後にマッチした区切り文字以降の入力文字がすべて含まれます。
●limit が負の値の場合
分割回数と配列の長さは制限されません。与えられた文字列を全てregexで分割します。
●limitがゼロの場合
分割回数と配列の長さは制限されません。負の値との違いは、分割された後で、最後の項目が空白の場合には、それを配列に格納しない事です。なお分割途中にある空白文字列は、戻り値の配列に格納されます。
【関連記事】
第4章:ハイスコアを表示する(その2)
●文字列を結合する例:
1 2 3 4 5 6 7 8 9 10 11 |
String str1; String str2; String strBond; //文字列を作成 str1 = "バナナ,リンゴ,スイカ"; str2 = "なし,もも+ぶどう"; //文字列を結合する strBond = str1 + "," + str2; println( "結合=" + strBond ); |
フルーツの名前を半角カンマ(“,”)区切りで格納した文字列1と2(str1とstr2)を、間に半角カンマを挿入しながら連結しています。
“バナナ,リンゴ,スイカ” + “,” + “なし,もも+ぶどう” ですね。
●文字列を分割する例(limitが正の数)
1 2 3 4 5 6 7 8 9 10 11 12 13 |
String str; String[] fruit; int i = 0; //文字列を作成 str = "バナナ,リンゴ,スイカ,,なし,もも+ぶどう,,,"; //文字列を分割する fruit = str.split(",", 3); for (String s : fruit ) { println( "分割[" + i + "]=" + s ) ; i++; } |
“バナナ,リンゴ,スイカ,,なし,もも+ぶどう,,,“ という文字列を 半角カンマを区切り文字として分割しています。
分割回数に3を指定していますので、 3 – 1 = 2回まで分割した結果と、残りの文字列がString配列に戻されます。
以下のようになります。
String[0] = “バナナ”
String[1] = “リンゴ”
String[2] = “スイカ,,なし,もも+ぶどう,,,”
●文字列を分割する例(limitが負の数)
1 2 3 4 5 6 7 8 9 10 11 12 13 |
String str; String[] fruit; int i = 0; //文字列を作成 str = "バナナ,リンゴ,スイカ,,なし,もも+ぶどう,,,"; //文字列を分割する fruit = str.split(",", -1 ); for (String s : fruit ) { println( "分割[" + i + "]=" + s ) ; i++; } |
先ほどの例と違うのは、split()に与える分割回数が負の値(-1)になっている所です。
以下のようになります。
String[0] = “バナナ”
String[1] = “リンゴ”
String[2] = “スイカ”
String[3] = “”
String[4] = “なし”
String[5] = “もも+ぶどう”
String[6] = “”
String[7] = “”
String[8] = “”
「スイカ」と「なし」の間には空文字がありますが、空文字のまま戻されます。
また「もも+ぶどう」の後ろのある空文字も、その数分だけ戻されます。
●文字列を分割する例(limitがゼロ)
1 2 3 4 5 6 7 8 9 10 11 12 13 |
String str; String[] fruit; int i = 0; //文字列を作成 str = "バナナ,リンゴ,スイカ,,なし,もも+ぶどう,,,"; //文字列を分割する fruit = str.split(",", 0 ); for (String s : fruit ) { println( "分割[" + i + "]=" + s ) ; i++; } |
split()に与える分割回数を0にしています。
負の値との違いは、「もも+ぶどう」のあとにある空文字が戻されない事です。
以下のようになります。
String[0] = “バナナ”
String[1] = “リンゴ”
String[2] = “スイカ”
String[3] = “”
String[4] = “なし”
String[5] = “もも+ぶどう”
「スイカ」と「なし」の間には空文字がありますが、空文字のまま戻されます。
●文字列を分割する例(分割文字が2文字以上)
1 2 3 4 5 6 7 8 9 10 11 12 13 |
String str; String[] fruit; int i = 0; //文字列を作成 str = "バナナ,リンゴ,スイカ,,なし,もも+ぶどう,,,"; //文字列を分割する fruit = str.split(",,", 0 ); for (String s : fruit ) { println( "分割[" + i + "]=" + s ) ; i++; } |
これまでの例は分割文字(regex)が1文字の例でした。本例は分割文字が2文字(連続する半角カンマ)になっています。どうなるか、想像できますか?。
以下のようになります。
String[0] = “バナナ,リンゴ,スイカ”
String[1] = “なし,もも+ぶどう”
String[2] = “,”
わかりにくいので図もつけました。赤文字で書いた連続する半角カンマが区切り文字になる事が、おわかり頂けると思います。
本ページで利用しているアイコン画像は、下記サイト様より拝借しております。各画像の著作権は、それぞれのサイト様および作者にあります。