Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

yurindo

いくつあるかわからない1次元配列の要素を、カンマやスラッシュで区切った形で1つの文字列にしたいのですがどの様な方法が考えられますでしょうか?下のような文字列にしたいです。

例えば・・・
「str[] = {"A","B","C","D","E"}」を、「A/B/C/D/E」という文字列に直したいのです。実際には配列の要素数は不明とします。

やはりfor文をstr.lengthの数だけ回して処理を行うとこころから始まるのでしょうか??

10

回答

5417

閲覧

10件の回答

評価

0

スイマセンm(__;)m名前と題名が逆でした。

題名は「配列の要素を1つの文字列にする方法。」です。

大変失礼しました、お願いします。

評価

0

そうだよ。

でも、拡張for文なら、個数を気にする必要はない。

俺なら、StringBuilderに、アタマに'/'付きで連結して、
最後に先頭の'/'をちょん切るかな。

評価

0

要素数を固定でしか扱えないロジックはダメなロジック。

ロジックを理解するという意味で、組んでみることを勧めるけど、簡単に済ませたいならStringUtils#join()でも使うんだね。

評価

0

不良社員さんのおっしゃるStringBuilderを使って考えてみました。結果、下記の内容で「A/B/C/D/E」と表示させる事が出来ました、ありがとうございます^^

こういう事でいいんですよね?

///////////////////////////////////////////
StringBuilder sb = new StringBuilder();
        
for(int i = 0 ; i < str.length-1 ;i++){
sb.append(str[i]).append("/");    
}

String result = sb.append(str[str.length-1]).toString();
///////////////////////////////////////////

$さんがおっしゃってるStringUtils#join()というのは初めて聞いたのでこちらも調べて使えるようになりたいと思います。

評価

0

これはスレ主さんが最初に書いたことそのままで、
俺が書いたこととは違うけどな。

評価

0

拡張for文でも考えてみました・・・。

////////////////////////////////////
StringBuilder sb = new StringBuilder();
        
for(String s : str){
sb.append(s).append("/");    
}
        
String result = sb.substring(0, sb.length() - 1);
////////////////////////////////////

これでも同じように出力する事ができました。
これが不良社員さんがおっしゃっている事でしょうか・・・。
要素数を固定で扱わない場合は拡張for文の方が良いという意味なのですか?

何度も質問すいません・・・。

評価

0

>要素数を固定で扱わない場合は拡張for文の方が良い
配列に対する拡張for文は、コンパイル時に.length-1までループするforに置き換えられる。
ソースレベルでlengthを書かなくて済むというだけだよ。

ちなみに、

1. 要素数0で実行してみること。
2. 不良社員さんが言ったのは、append()の順番が逆。どちらでもいいけど私が作るときも逆順だね。

評価

0

>ソースレベルでlengthを書かなくて済むというだけ
拡張for文の利点(?)をまだ完全に把握していないようなので更に調べてみます。

要素数0での実行でjava.lang.StringIndexOutOfBoundsExceptionが発生しました^^;これに対する策もこれから練ってみようかと思います。

いろいろと勉強になりました。
不良社員さん、$さんありがとうございました。

評価

0

拡張for文は、どちらかといえばIterableに対して有効なんだと思う。
配列に対して使えるのは、(今の実装では)おまけっぽい気がする。
これは個人的な感覚だけど。

評価

0

俺のやり方だと、最後のsubstring()の引数が1個ですむんだよ。
length()も必要ないし。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。