charAt以外の文字列の分割方法
前回作った文字列から文字を切り出すプログラムの文字を変更してみました。「だるまさんがころんだ」のかわりに「とろおりゃんせとおりゃんせ」にしたのです。
String toryanse = "とおりゃんせとおりゃんせ"; int string_length = toryanse.length(); for(int i = 0;i < string_length;i++){ System.out.println(toryanse.charAt(i)); }
しかし実行したらこんな感じでした。
と お り ゃ ん せ と お り ゃ ん せ
これだとリズムが出てきていません。手を叩きながら「とおりゃんせ」を歌えばすぐに気付きます。本当は「と」「お」「りゃん」「せ」「とお」「りゃん」「せ」「ー」となって欲しいのです。
でもこれだと「りゃん」や「とお」は1文字ではないのでcharAtは使えません。このメソッドはあくまで1文字を取得するためのメソッドでリズムに乗らないからといって複数文字を返してくれる事はありません。
最初に与える文字列にどこで音が切れるのか教えておく事にします。
考え方と必要なメソッド
まず文字列に切れ目である目印を入れておきます。これを区切り文字、区切り文字列と言い英語でseparator セパレーターと呼びます。よく使われるのはタブやカンマですがここではカンマを使います。ファイルでCSV形式というのがありますがこれはComma Separated Valuesの略で「カンマで区切られた複数の値」という意味です。
String toryanse = "と,お,りゃん,せ,とお,りゃん,せ,ー";
先ほどの文字列にカンマを入れてどこで区切れるかわかるようにしました。日本語だと区切り文字に空白も使えますが一般的でないです。なぜかというと英語では二つの単語で一つの意味のものがあり空白を区切りにするとその単語も分割されてしまうからです。
文字列を区切り文字で分割する
区切り文字、ここではカンマを目印にして文字列を分割するメソッドがあります。String.splitメソッドです。引数には目印となる区切り文字列を指定します。戻り値は文字列の配列になります。
String toryanse = "と,お,りゃん,せ,とお,りゃん,せ,ー"; String[] split_strings = toryanse.split(",");
このsplit_stringsの中身は
String[] split_strings = new String[]{"と", "お", "りゃん", "せ", "とお", "りゃん", "せ", "ー"};
と同じです。
配列の長さを取得する
文字長を撮るときにはString.lengthメソッドを使っていました。しかし配列はメソッドではなくlengthという名前の属性で配列の長さを持っています。
int split_length = split_strings.length;
メソッドは()をつけます。これでメソッドで定義された何かしらの処理が動くのです。一方属性値の取得は参照するだけなので属性名で値を取得できます。
実装
必要なものがそろったのでコードを書き出します。
String toryanse = "と,お,りゃん,せ,とお,りゃん,せ,ー"; String[] split_strings = toryanse.split(","); int split_length = split_strings.length; for(int i = 0;i < split_length;i++){ System.out.println(split_strings[i]); }
配列の参照は配列名に[ ]をつけてその中に何番目かを書けばよいのでした。結果は以下の通りです。
と お りゃん せ とお りゃん せ ー