首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Fencepost问题的优雅解决方案(使用字符串)

Fencepost问题的优雅解决方案(使用字符串)
EN

Stack Overflow用户
提问于 2011-07-28 18:29:22
回答 4查看 3.9K关注 0票数 3

我指的是用中间的某个String连接String,比如用句点连接句子,或者用逗号连接参数列表。我知道你可以使用库,但有时这些库不能做你想要做的事情,比如当你想要生成你正在连接的短语时。到目前为止,我已经想出了两个解决方案,

代码语言:javascript
复制
StringBuffer sentence = new StringBuffer();
String period = "";
for ( int i = 0; i < sentences.length; i++ ) {
    sentence.append( period + sentences[i] );
    period = ". ";
}

它受到period的冗余重新分配的影响。还有

代码语言:javascript
复制
StringBuffer actualParameters = new StringBuffer();
actualParameters.append( parameters[0] );
for ( int i = 1; i < parameters.length; i++ ) {
    actualParameters.append( ", " + parameters[i] );
}

这删除了重新分配,但看起来仍然没有吸引力。任何其他的解决方案都是非常感谢的。

EN

回答 4

Stack Overflow用户

发布于 2011-07-28 18:39:26

有一个family of functions in Apache Commons Lang that does just that

如果你必须自己编写代码,我通常会这样做:

代码语言:javascript
复制
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的东西。

票数 3
EN

Stack Overflow用户

发布于 2011-07-28 18:42:21

这似乎是一个常见的问题!

Remove last character of a StringBuilder?

这将导致类似这样的结果:

代码语言:javascript
复制
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());
票数 1
EN

Stack Overflow用户

发布于 2011-07-28 20:24:57

如果您至少有一个字符串,则:

代码语言:javascript
复制
String join(String separator, String... strings)
{
    String s = strings[0];
    for (int i = 1; i < strings.length; i++) {
        s += separator + strings[i]; 
    }
    return s;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6857502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档