比較 Java 中的 StringBuilder 對象
1. 概述
在 Java 中, StringBuilder
類別允許我們建立一個保存字元序列的可變物件。這使得更新物件變得很容易,而不必每次都從頭開始建立它,就像標準String
類別的情況一樣。在本教程中,我們將了解如何比較 Java 11 發布之前和之後的兩個StringBuilder
物件。
2. Java 11之前
在 Java 11 之前, StringBuilder
沒有內建的比較方法。因此,我們需要自己編寫。第一個明顯的檢查是被比較的兩個物件的長度是否相同。如果不匹配,我們可以立即說它們不匹配。
一旦我們知道它們的長度相同,我們就可以利用StringBuilder
實作CharSequence
的事實來存取charAt()
方法並依序比較每個字元。讓我們將這兩個步驟合併為一個我們可以使用的方法:
boolean compare(StringBuilder one, StringBuilder two) {
if (one.length() != two.length()){
return false;
}
for (int i = 0; i < one.length(); i++) {
if (one.charAt(i) != two.charAt(i)) {
return false;
}
}
return true;
}
我們現在可以在一些測試中使用它。讓我們看看它是否確認兩個StringBuilders
相同:
@Test
void whenUsingJavaEight_givenTwoIdenticalStringBuilders_thenCorrectlyMatch() {
StringBuilder one = new StringBuilder("Hello");
StringBuilder two = new StringBuilder("Hello");
boolean result = StringBuilderCompare.compare(one, two);
assertEquals(true, result);
}
為了完成檢查,現在讓我們看看它可以檢測到兩個不相同的:
@Test
public void whenUsingJavaEight_givenTwoDifferentStringBuilders_thenCorrectlyIdentifyDifference() {
StringBuilder one = new StringBuilder("Hello");
StringBuilder two = new StringBuilder("World");
boolean result = StringBuilderCompare.compare(one, two);
assertEquals(false, result);
}
第二個測試中的範例長度相同,因此我們將使用charAt()
進行比較。
3. Java 11之後
隨著 Java 11 的發布, StringBuilder
現在實作了Comparable
。這使我們可以存取返回int
compareTo()
方法。如果存在匹配,則傳回值為零;如果StringBuilders
不同,則傳回值不為零。讓我們看看兩個具有相同值的StringBuilders
的實際效果:
@Test
void whenUsingJavaEleven_givenTwoIdenticalStringBuilders_thenCorrectlyMatch(){
StringBuilder one = new StringBuilder("Hello");
StringBuilder two = new StringBuilder("Hello");
assertEquals(0, one.compareTo(two));
}
接下來讓我們試著使用兩個不同的值:
@Test
void whenUsingJavaEleven_givenTwoDifferentStringBuilders_thenCorrectlyIdentifyDifference(){
StringBuilder one = new StringBuilder("Hello");
StringBuilder two = new StringBuilder("World");
assertNotSame(0, one.compareTo(two));
}
現在這比 Java 11 之前容易得多。傳回的整數告訴我們比較的兩個在字典順序上是否不同。我們也能夠判斷差異是正值還是負值,這在某些應用中可能很有用。
4。結論
在本文中,我們研究了比較StringBuilder
物件的兩種方法。我們已經看到,如果我們使用早於 11 的 Java 版本,則需要編寫自己的比較方法。然而,從Java 11開始,我們提供了方便的compareTo()
方法,它可以達到相同的結果。
與往常一樣,範例的完整程式碼可在 GitHub 上取得。