3

私が言及しているのは、ピリオドで区切られた文やコンマでパラメーターリストを連結するなど、途中でString特定の s と連結することです。Stringライブラリを使用できることは知っていますが、連結しているフレーズを生成したい場合など、ライブラリが思い通りにならないことがあります。これまでのところ、私は2つの解決策を考え出しました。

StringBuffer sentence = new StringBuffer();
String period = "";
for ( int i = 0; i < sentences.length; i++ ) {
    sentence.append( period + sentences[i] );
    period = ". ";
}

の冗長な再割り当てに苦しんでいますperiod。もあります

StringBuffer actualParameters = new StringBuffer();
actualParameters.append( parameters[0] );
for ( int i = 1; i < parameters.length; i++ ) {
    actualParameters.append( ", " + parameters[i] );
}

これにより、再割り当てが削除されますが、それでも魅力的ではありません。他のソリューションは大歓迎です。

4

4 に答える 4

3

Apache Commons Lang には、まさにそれを行う一連の関数があります。

自分でコーディングする必要がある場合、私が通常この種のことを行う方法は次のとおりです。

StringBuilder sb = new StringBuilder();
for (String sentence : sentences) {
    if (sb.length() != 0) {
        sb.append(". ");
    }
    sb.append(sentence);
}

このバージョンではsentences、任意のイテラブル (文字列を返す) を許可します。StringBuilderの代わりに を使用することにも注意してくださいStringBuffer

これを に似たものに一般化するのは簡単org.apache.commons.lang.StringUtils.joinです。

于 2011-07-28T10:39:25.877 に答える
1

If you have at least one string then:

String join(String separator, String... strings)
{
    String s = strings[0];
    for (int i = 1; i < strings.length; i++) {
        s += separator + strings[i]; 
    }
    return s;
}
于 2011-07-28T12:24:56.873 に答える
1

よくある質問のようです!

StringBuilder の最後の文字を削除しますか?

それは次のようなものになります:

StringBuffer sentence = new StringBuffer();
String separator = ", ";
for ( int i = 0; i < sentences.length; i++ ) {
    sentence.append( sentences[i] )
    sentence.append( separator );
}
sentence.setLength(sentence.length() - separator.length());
于 2011-07-28T10:42:20.893 に答える
0
public String join(String sep, String... parts) {
  boolean first = true;
  final StringBuilder sb = new StringBuilder();
  for(String part: parts) {
    if(first)
      first = false;
    else
      sb.append(sep);
    sb.append(part);
  }
}

不要な同期と "+" 演算子があるため、StringBuffer を使用しないでください。不要な中間 String オブジェクトが作成されるためです。

于 2011-07-28T10:41:03.827 に答える