還是比這更好的方法?Java - 是否有一個內置函數用於連接字符串[]中的字符串?
String concat(String[] strings) {
StringBuilder out = new StringBuilder();
for(String next: strings) {
out.append(next);
}
return out.toString();
}
不用擔心,如果不是,我只是覺得應該有一個內置的?
還是比這更好的方法?Java - 是否有一個內置函數用於連接字符串[]中的字符串?
String concat(String[] strings) {
StringBuilder out = new StringBuilder();
for(String next: strings) {
out.append(next);
}
return out.toString();
}
不用擔心,如果不是,我只是覺得應該有一個內置的?
不,不在當前Java庫中。
在JDK7中,您應該可以編寫String.join("", strings)
。發現在for循環中需要索引的「85%」是做一個字符串連接(無論如何你都可以這樣做)。
我想,如果你想成爲超級高效的,你可以把它寫成類似:
public static String concat(String... strs) {
int size = 0;
for (String str : strs) {
size += str.length;
}
final char[] cs = new char[size];
int off = 0;
try {
for (String str : strs) {
int len = str.length();
str.getChars(0, len, cs, off);
off += len;
}
} catch (ArrayIndexOutOfBoundsException exc) {
throw new ConcurrentModificationException(exc);
}
if (off != cs.length) {
throw new ConcurrentModificationException();
}
return new String(cs);
}
(沒有編譯或測試,當然)。
看看新Google Guava libraries ,一旦它從1.0RC4通過到1.0,它將合併Google Collections。番石榴和收藏品爲您提供了相當多的力量和優雅,並已廣泛用於Google生產代碼。
的Joiner類適合您的完美例子:
String[] strings = { "Stack", "Overflow", ".com" };
String site = Joiner.on("").join(strings);
克瓦希Stensby具有番石榴/收藏的一個很好的four part exploration。
與Apache Collections類似,它不是JDK的一部分,儘管它在java.util.collection上非常小心地構建。
小修正:Joiner.on(「」)。join(字符串)。 – 2009-11-29 09:47:03
謝謝凱文,修好了! (*感謝收藏集,我剛開始仔細觀察它們,迫不及待地使用它們!) – 2009-11-29 14:33:53
第二個建議看看谷歌番石榴。
Google Collections上週發佈,本週Guava已發佈進行測試。 Google Collections的內容很紮實,API不會改變。我非常喜歡Google Collections,因爲它完全通用。谷歌的人也聲稱,它的速度足以讓他們用於製作,這是相當令人印象深刻的,但我無法親自驗證。
在一年中,大聲笑:) – 2009-11-27 23:21:26
IIRC,最後一個里程碑現在是在九月(2010年)。 – 2009-11-27 23:21:35
目前的M5里程碑似乎也完全可用。 – skaffman 2009-11-27 23:30:51