Javaで文字列を1文字ずつ配列に格納する方法
こんにちは、@Yuuです。
Javaを使ってプログラミングをしていたのですが、文字列を1文字ずつ配列に格納するのに非常に手こずったので、
備考録も兼ねて書いておきます。
スポンサーリンク
やりたかったこと
1 2 3 4 5 6 |
// "abc"という文字列 String str = "abc"; // strArray[0] -> "a", strArray[1] -> "b", strArray[2] -> "c" String[] strArray = {"a", "b", "c"}; |
変数str
に"abc"
があった時に、
変数strArray
に1文字ずつ"a""b""c"
と格納したかったわけです。
イメージにすると以下のような感じですね。
splitを使ってやってみた
まず文字列.split("")
で文字列を1文字ずつ分割する事が出来た気がしたので、やってみました。
1 2 3 4 5 6 7 8 9 10 |
// "abc"という文字列 String str = "abc"; // splitで分割して格納 String[] strArray = str.split(""); for (int i = 0; i < strArray.length; i++) { // 1文字ずつ表示 System.out.println("strArrayの要素番号" + i + "の時:" + strArray[i]); } |
これで結果を表示してみると
1 2 3 4 5 |
strArrayの要素番号0の時: strArrayの要素番号1の時:a strArrayの要素番号2の時:b strArrayの要素番号3の時:c |
あれ(´・ω・`)?
0番目の要素に変な空白が入ってる?
このままではあかん・・!
ということで、
まず添字0番目に空白が入っている配列を作り、次に0番目以外の要素を新たな配列に格納するという処理に変更してみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
// "abc"という文字列 String str = "abc"; // まずstrArraySubに1文字多い配列を作る String[] strArraySub = str.split(""); // 最初に空白が入ってしまっている"strArraySub"の結果を表示 for (int i = 0; i < strArraySub.length; i++) { // "strArraySub"を1文字ずつ表示 System.out.println("strArraySubの要素番号" + i + "の時:" + strArraySub[i]); } // strの文字列分の要素を持つ配列"strArray"作成 String[] strArray = new String[str.length()]; // "strArraySub"の先頭1文字を省いて"strArray"に格納 for (int i = 1; i < strArraySub.length; i++) { strArray[i - 1] = strArraySub[i]; } // "strArray"の結果を表示 for (int i = 0; i < strArray.length; i++) { // "strArray"を1文字ずつ表示 System.out.println("strArrayの要素番号" + i + "の時:" + strArray[i]); } |
これで結果を表示してみると
1 2 3 4 5 6 7 8 |
strArraySubの要素番号0の時: strArraySubの要素番号1の時:a strArraySubの要素番号2の時:b strArraySubの要素番号3の時:c strArrayの要素番号0の時:a strArrayの要素番号1の時:b strArrayの要素番号2の時:c |
きちんとstrArray
に格納出来てますね。
charAtを使ったもっと便利なやり方
splitを使った処理でどうにか出来ていたんですが、実は某「Pa◯za」というサイトで問題を解いていた時に、このsplitを使った方法だとエラーになってしまったんですね。
そこで色々調べたら「charAt()」という便利なメソッドがあったんです!
charAtメソッドは、「文字列からn番目の文字を抜き出す」という事が出来ます。
例えば
1 2 3 |
String str = "abc"; System.out.println(str.charAt(1)); //結果は"b"となる |
となります。
ただし、メソッド名の通りchar型で値を返すので、以下のようにするとエラーになります。
1 2 3 |
String str = "abc"; String str2 = str.charAt(1); //char型で値が返るのでエラーになる |
でも今回は先程と同じようにString型の配列にしたい!
という事で、以下のような処理内容にしました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
// "abc"という文字列 String str = "abc"; // まずstrArraySubに1文字多い配列を作る String[] strArray = new String[str.length()]; // 変数strの長さ分回す for (int i = 0; i < str.length(); i++) { // strの先頭から1文字ずつString型にして取り出す String str2 = String.valueOf(str.charAt(i)); // 配列に順番に格納する strArray[i] = str2; } for (int i = 0; i < strArray.length; i++) { // "strArray"を1文字ずつ表示 System.out.println("strArrayの要素番号" + i + "の時:" + strArray[i]); } |
これで結果を表示してみると
1 2 3 4 |
strArrayの要素番号0の時:a strArrayの要素番号1の時:b strArrayの要素番号2の時:c |
無事strArray
に1文字ずつ格納出来ました!(๑•̀ㅂ•́)و✧
ちなみに今回はfor文の中で、分かりやすくstr2
という変数を新たに作りましたが、strArray
にいきなり格納して構わないと思います。
for文の中のみ書き換えたバージョンを記述しておきますね。
1 2 3 4 5 6 |
// 変数strの長さ分回す for (int i = 0; i < str.length(); i++) { // 配列に順番に格納する strArray[i] = String.valueOf(str.charAt(i)); } |
splitメソッドを使うよりも全然楽ですね、もっと早く知りたかった・・
まとめ
「Pa◯za」ではこのcharAtメソッドを知らなかったことで泣きを見ましたが、それでもプログラムの問題を解くのは楽しいなぁと思いました。
皆さんも文字列を1文字ずつ配列に格納する場合は、splitメソッドではなくcharAtメソッドを使う事をおすすめします。
ではでは
今回はこの辺で!ヽ(•̀ω•́ )ゝ✧