[Processing] 文字列(String)-基礎

  • SumoMe

Processingでは文字列をStringクラスのオブジェクトとして扱います。StringクラスについてはJAVAと同じかもしれませんが、Processingが用意している文字列関数がいくつも用意されていますので、そのなかでいくつかメモしておきます。

文字列の生成

Processingではいくつもの文字列(Stringオブジェクト)生成の手段があります。そのなかで代表的な方法を紹介します。また、生成した文字列はStringオブジェクトですので、Stringクラスの変数に格納することができます。

ダブルクォート( ” )で囲んで生成

もっとも一般的な方法で、ソースコードの中で文字列を埋め込んでしまう方法です。Stringオブジェクトとした文字列をダブルクォート( ” )で囲むことで文字列として生成することができます。

String s = "文字列"; // 文字列の生成&格納
println(s); // 表示 -> 文字列 と表示される

関数を使った生成

数値を文字列にしたいケースがあります。例えば、桁を揃えたり、3桁毎にカンマ( , )を入れたりなどです。それらの需要に対してはいくつかの方法が提供されています。

桁を指定する

nf関数を利用し、桁を揃え、0詰めで文字列として生成します。また、この関数は整数型と実数型で引数が異なるので注意が必要です。

戻り値 関数名 第一引数 第二引数 第三引数
整数:int 文字列:String nf 整数:int(配列可:int[]) 桁数:int なし
実数:float 文字列:String nf 実数:float(配列可:float[]) 整数部分の桁:int 小数部分の桁:int

整数の場合

整数型の場合、引数は2つになります。指定桁数より、実際の数値の方が大きい場合、数値の桁数が優先されます。

int i = 10; // 整数を宣言・初期化
int [] iarray = {10,20,30}; // 整数配列を3つの値で宣言・生成・初期化
println(nf(i,5)); // 数値の桁が指定桁より小さい場合
ptintln(nf(i,1)); // 数値の桁より指定桁が小さい場合
println(nf(iarray,5)); // 配列の場合
00010
10
[0] "00010"
[1] "00020"
[2] "00030"

実数の場合

整数型の場合、引数は3つになります。整数部分指定桁数より、整数部分の数値の方が大きい場合、数値の桁数が優先されます。小数部分の桁数が数値の小数部分より、精度が劣るときは四捨五入されます。

float f = 10.543;
float[] farray = {10.5,23.456,30.9872};
println(nf(f,5,5));
println(nf(10.553,5,1)); // 小数部分有効一桁,二桁目四捨五入(繰り上げ)
println(nf(10.543,5,1)); // 小数部分有効一桁,二桁目四捨五入(切り捨て)
println(nf(farray,5,3));
00010.54300
00010.6
00010.5
[0] "00010.500"
[1] "00023.456"
[2] "00030.987"

整数部を3桁毎にカンマで区切る

お金や大きな桁を扱う数値は、3桁ごとにカンマで区切る必要がでてきます(何て言う名称なんでしょうね?)。あれを実現してくれる関数がnfc関数です。この関数もnf関数同様、整数と実数で扱いが異なりますが、整数部分に関しては取扱ません。nf関数から第一引数を取り除いたものだと思ってください。

>

戻り値 関数名 第一引数 第二引数
整数 文字列 nfc 整数(配列可) なし
実数 文字列 nfc 実数(配列可) 小数部分の桁
int i = 123456789;
float f = 1234.567;
println(nfc(i));
println(nfc(f,5));
123,456,789
1,234.56702

正負記号をつける

nfp関数は数値の先頭に正負記号(+,-)を負荷した文字列を生成します。使い方はnf関数と同様です。

戻り値 関数名 第一引数 第二引数 第三引数
整数 文字列 nfp 整数(配列可) 桁数 なし
実数 文字列 nfp 実数(配列可) 整数部分の桁 小数部分の桁
int ip = 10; // 正の整数
int im = -2; // 負の整数
float fp = 23.5; // 正の実数 
float fm = -2.1234; // 負の実数
println(nfp(ip,0)); 
println(nfp(im,0));
println(nfp(fp,0,5));
println(nfp(fm,0,5));
+10
-2
+23.50000
-2.12340

負の記号だけつける

nfs関数を使うことによって、負の値の場合のみ負記号(-)が負荷された文字列を生成します。正の値の場合は、先頭に空白が挿入されます。nfp関数は正負両方の記号を先頭に負荷する関数でしたが、nfs関数は負の記号しか負荷されません。

戻り値 関数名 第一引数 第二引数 第三引数
整数 文字列 nfs 整数(配列可) 桁数 なし
実数 文字列 nfs 実数(配列可) 整数部分の桁 小数部分の桁
int ip = 10; // 正の整数
int im = -2; // 負の整数
float fp = 23.5; // 正の実数 
float fm = -2.1234; // 負の実数
println(nfs(ip,0)); 
println(nfs(im,0));
println(nfs(fp,0,5));
println(nfs(fm,0,5));
 10
-2
 023.50000
-2.12340

先頭行の10の前には空白が入っています。

文字列の加工

文字列を加工する手段は様々な方法で提供されていますが、結合と分割を挙げます。

文字列の結合

加算演算子を使う( + )

文字列に対して、加算演算子を用いることで、

  • 文字列と文字列
  • 文字列と基本形

を結合することができます。

// 文字列と文字列の結合
String a = "I";
String b = "am";
String c = "man.";
String space = " ";
String d = a + space + b + space + c;
println(d);
I am man.
// 文字列と基本型の結合
println("apple:¥"+100); // 文字列+整数
println("banana:$"+1.1); // 文字列+実数
println("turu?false?->"+true); // 文字列+boolean
apple:\100
banana:$1.1
turu?false?->true

関数を使った連結

文字列の配列に対しては、join関数を使うと非常に便利です。

関数名 第一引数 第二引数
join 文字列配列(String [] ) 分割文字・文字列(” , “”)
String [] strs = {"apple","banana","mango"};
String s = join(strs,":");
println(s); // コロンで分割
println(join(strs,"")); // 分割なし
println(join(strs,",")); // カンマ分割
apple:banana:mango
applebananamango
apple,banana,mango

応用技

join関数とnf関数等を使うと、整数や実数の配列も整形して表示することができます。

int [] iarray = {1,5,9,10}; // 整数配列を宣言・生成・初期化
String [] strs = nf(iarray,0); // 整数配列から文字列配列を生成
String line = join(strs,","); // 文字列配列の間にカンマを入れて文字列を生成
println(line); // 文字列を表示
1,5,9,10

これをもっと短く書くと

int [] iarray = {1,5,9,10};
println(join(nf(iarray,0),","));
1,5,9,10

変数を宣言してもいいですし、短くかいても結構です。

文字列分割

split関数を用いることで、特定の文字を境に文字列を分割することができます。また、このような処理は需要が高く、必要な場面が出てくることが多々あります。例えば、

  • 英文を単語に分割する
  • カンマ区切りのデータ(CSV)ファイルを展開する

など枚挙にいとまがないです。

戻り値 関数名 第一引数 第二引数
String配列 Split 対象文字列(String) 分割文字(charかString)

split関数は第一引数に、分割したい文字列、第二引数に分割文字(文字列)を指定することで、分割した文字列を配列として返します。分割文字の場合は一文字(例:’,’)、文字列の場合も一文字以上入力しなければいけません。また、二文字以上の場合はその文字列に一致する場所を分割します。

// 空白で分割例
String s = "I am man.";
println(split(s," "));
[0] "I"
[1] "am"
[2] "man."
// 複数文字で分割例
String s = "I am ,man.";
println(split(s," ,"));
[0] "I am"
[1] "man."

応用

int関数を利用することで、整数値をカンマで区切った文字列をカンマで分割し、整数に変換し、整数配列にします。つまり、文字列から整数配列へ変換します。

String s = "10,20,30,40,50";
int [] iarray = int(split(s,","));
println(iarray);
[0] 10
[1] 20
[2] 30
[3] 40
[4] 50

また、int関数ではなく、float関数を使うことで、実数に変換することもできます。

おわりに

今回は文字列の生成と加工をいくつか挙げてみました。(たぶん)JAVAのStringクラスを利用しているため、JAVAのStringクラスを参照したほうが良いかもしれません。Processingはそれらのクラスに内包されているメソッドを関数として、目に触れやすく整理しているところが便利なのではないでしょうか。

コメントを残す

メールアドレスが公開されることはありません。