嘗試在Java中創建方法時,通過基於長度擴展緩衝區的內容(通過放入適當數量的空白)來格式化字符串。因此,根據給定的特定長度,字符串的第一個字符位於第一個索引中,而最後一個字符位於實際的最後一個索引本身。如何使用基於指定長度的空格來格式化字符串?
public static String format(String sentence, int length) {
if (sentence.length() >= length) {
return sentence;
}
StringBuilder sb = new StringBuilder();
String[] words = sentence.split("\\s+");
int usedCharacters = 0;
for (String word : words) {
usedCharacters += word.length();
}
int emptyCharacters = length - usedCharacters;
int spaces = emptyCharacters/words.length - 1;
for (String word : words) {
sb.append(word);
for (int i = 0; i <= spaces; i++) {
sb.append(" ");
}
}
return sb.toString();
}
對於這個單元測試,這工作:
@Test
public void isCorrectLength() {
String value = StringUtils.format("brown clown", 20);
assert(value.length() == 20);
}
所以,在這裏,最大緩衝器大小是:20
的使用的字符總數爲:10
總未使用字符的數量爲:10
最終結果(如果您打印字符串)是:
brown clown
在小丑的 「n」 是在索引20 ...
然而,存在邊緣的情況下使用以下測試(這會導致它打破):
@Test
public void isCorrectLengthWithLongerSentence() {
String value = StringUtils.format("Love programming Java using Eclipse!", 50);
assert(value.length() == 50);
}
緩衝區大小:50個
總使用的字符:25個 總計未使用的字符:25
個空間:3
最終長度:48
最終的結果(如果打印字符串)是:
Love programming Java using Eclipse!
爲什麼最終指數48,而不是50?
感嘆號「!」在「Eclipse」之後,應該是50而不是48 ...
我懷疑它是由於我的空間計算關閉了。
感謝您花時間閱讀本文。
我猜測這是因爲你正在爲你的空間計算使用一個int,所以四捨五入成爲一個問題。單詞之間的空格不能相同。 –
問題出在'int spaces = emptyCharacters/words.length - 1;'。首先,我認爲你的意思是'emptyCharacters /(words.length - 1)'。其次,正如@SamOrozco所說,如果它不能均勻分配,您將需要不同數量的空格... – qxz
我很確定這是在AP Comp上。科學。去年考試:D – qxz