在大多數使用情況,使用StringBuilder
(如已回答)是做這件事的好方法。但是,如果表現很重要,這可能是一個很好的選擇。
/**
* Insert the 'insert' String at the index 'position' into the 'target' String.
*
* ````
* insertAt("AC", 0, "") -> "AC"
* insertAt("AC", 1, "xxx") -> "AxxxC"
* insertAt("AB", 2, "C") -> "ABC
* ````
*/
public static String insertAt(final String target, final int position, final String insert) {
final int targetLen = target.length();
if (position < 0 || position > targetLen) {
throw new IllegalArgumentException("position=" + position);
}
if (insert.isEmpty()) {
return target;
}
if (position == 0) {
return insert.concat(target);
} else if (position == targetLen) {
return target.concat(insert);
}
final int insertLen = insert.length();
final char[] buffer = new char[targetLen + insertLen];
target.getChars(0, position, buffer, 0);
insert.getChars(0, insertLen, buffer, position);
target.getChars(position, targetLen, buffer, position + insertLen);
return new String(buffer);
}
字符串是不可變的。雖然這可行,但使用類似StringBuilder的東西在道義上是正確的,更不用說會讓你的代碼更快。 – wheresmycookie 2013-07-20 19:39:33
忘記StringBuilder。通過格式化,[String.format](http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#format%28java.lang.String,%20java.lang .Object ...%29)是可用的最佳選項。 – NobleUplift 2013-07-24 16:06:37
沒有循環,這是一個簡單的連接情況,編譯器應該使用字符串生成器對其進行優化,爲了便於閱讀,我傾向於使用+運算符,在這種情況下不需要顯式使用StringBuilder。使用「StringBuilder」解決方案,因爲它更快速,不尊重優化規則。代碼的可讀性。在分析後進行優化,只在需要時進行優化。 http://en.wikipedia.org/wiki/Program_optimization#Quotes – 2013-10-07 20:06:08