3

我指的是将Strings 与中间的某个连接起来String,例如连接用句点分隔的句子,或者用逗号连接参数列表。我知道您可以使用库,但有时这些库无法满足您的需求,例如当您想要生成要连接的短语时。到目前为止,我提出了两个解决方案,

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

似乎是一个常见的问题!

删除 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 回答
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 回答
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 回答