刪除 Java StringBuilder 的最後一個字符
一、概述
當我們想在 Java 中構建字符串時,我們通常會選擇方便的StringBuilder來完成這項工作。
假設我們有一個包含一些字符串段的StringBuilder序列,並且我們想從中刪除最後一個字符。在這個快速教程中,我們將探索三種方法來做到這一點。
2. 使用StringBuilder的deleteCharAt()方法
StringBuilder類具有deleteCharAt()方法。它允許我們在想要的位置移除字符.
deleteCharAt()方法只有一個參數:我們要刪除的char索引。
因此,如果我們將最後一個字符的索引傳遞給該方法,我們就可以刪除該字符。為簡單起見,我們將使用單元測試斷言來驗證它是否按預期工作。
所以接下來,讓我們創建一個測試來檢查它是否有效:
StringBuilder sb = new StringBuilder("Using the sb.deleteCharAt() method!");
sb.deleteCharAt(sb.length() - 1);
assertEquals("Using the sb.deleteCharAt() method", sb.toString());
如上面的測試所示,我們將最後一個字符的索引 ( sb.length() -1 ) 傳遞給deleteCharAt()方法,並期望刪除結束的感嘆號 ( ! )。
如果我們運行測試,它就會通過。所以, deleteCharAt()解決了這個問題。
3. 使用StringBuilder的replace()方法
StringBuilder的[replace()](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/StringBuilder.html#replace(int,int,java.lang.String))方法允許我們用給定的字符串替換序列子字符串中的字符。該方法接受三個參數:
-
start索引 - 開始索引,包括 -
endindex – 結束索引,排他 -
replacement- 用於替換的字符串
假設序列中最後一個字符的索引是lastIdx.如果我們想刪除最後一個字符,我們可以傳遞lastIdx作為開始索引, lastIdx+1作為結束索引,以及一個空字符串“”作為replace()的替換:
StringBuilder sb = new StringBuilder("Using the sb.replace() method!");
int last = sb.length() - 1;
sb.replace(last, last + 1, "");
assertEquals("Using the sb.replace() method", sb.toString());
現在,如果我們試一試,上面的測試就通過了。因此,可以使用replace()方法來解決問題。
4. 使用StringBuilder的substring()方法
我們可以使用StringBuilder的[substring()](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/StringBuilder.html#substring(int,int))方法從字符串的給定start和end索引中獲取子序列。該方法需要兩個參數,開始索引(包括)和結束索引(不包括)。
值得一提的是substring()方法返回一個新的String對象。換句話說, substring()方法不會修改StringBuilder對象。
我們可以將 0 作為start索引,將最後一個字符的索引作為end索引傳遞給substring()方法,以獲取最後一個字符被截斷的字符串:
StringBuilder sb = new StringBuilder("Using the sb.substring() method!");
assertEquals("Using the sb.substring() method", sb.substring(0, sb.length() - 1));
//the stringBuilder object is not changed
assertEquals("Using the sb.substring() method!", sb.toString());
如果我們執行它,測試就會通過。
正如我們在測試中看到的,即使substring()返回的String沒有最後一個字符 ( ! ),原始的StringBuilder也沒有改變。
5. 結論
在這篇簡短的文章中,我們學習瞭如何從StringBuilder序列中刪除最後一個字符。
像往常一樣,這裡提供的所有代碼片段都可以 在 GitHub 上找到。