Java 相當於 Python 的簡單字串切片
1. 概述
字串操作是程式設計中的常見任務。 Python 提供了一種使用簡單語法來切分字串的直接方法。但是,Java 中的字串切片並不那麼直接,需要不同的方法來實現相同的功能。
在本教程中,我們將探討 Java 與 Python 字串切片的等效之處以及如何有效地實現類似的操作。
2. 理解 Python 的字串切片
在 Python 中,切分字串就像使用冒號(:)
運算子一樣簡單。語法遵循以下模式:
string[start:stop:step]
-
start
:起始索引(含) -
stop
:結束索引(不包括) -
step
:增量(預設為 1) - 負索引從字串末尾開始計數
讓我們看幾個對字串“Hello World!”
進行切片的範例。 :
s = "Hello, World!"
s[0:5] # Output: Hello
s[:5] # Output: Hello
s[7:] # Output: World!
s[-6:] # Output: World!
s[::2] # Output: Hlo ol!
s[::-1] # Output: !dlroW ,olleH
現在,讓我們探討如何在 Java 中實作類似的行為。
3. Java 中的基本字串切片
與 Python 不同,Java 沒有內建的切片符號。但是,我們可以使用substring()
方法來達到類似的結果。
3.1.提取子字串
在 Python 中提取子字串是一項簡單的任務,這個概念在 Java 中也類似。
讓我們看看如何在 Python 中提取子字串:
s = "Hello, World!"
sub = s[0:5] # "Hello"
接下來我們用 Java 檢查一下擷取過程:
String s = "Hello, World!";
String sub = s.substring(0, 5); // "Hello"
在 Java 中, substring(start, end)
提取從 start(包含)到 end(不包含)的部分,就像 Python 的切片一樣。
3.2.省略開始或結束索引
就像提取子字串一樣,也有一種方法可以從開頭或結尾省略部分字串。
要在 Python 中省略,我們只需提供要省略的索引:
s[:5] # "Hello"
s[7:] # "World!"
我們可以在 Java 中使用相同的substring()
方法:
assertEquals("Hello", s.substring(0, 5));
assertEquals("World!", s.substring(7));
當僅提供start
索引時,Java 的substring(start)
會從start
提取到字串的末尾,模仿 Python 的行為。
4. Java 中的負索引
Python 允許負索引從末尾開始計數:
s[-6:] # "World!"
但是,Java 不支援負索引,所以我們必須手動轉換它們:
assertEquals("World!", s.substring(s.length() - 6));
這裡, s.length() – 6
計算正確的起始索引。
5. 在 Java 中實作步驟切片
在 Python 中,切片概念允許一步步跳過字元:
s[::2] # "Hlo ol!"
由於 Java 沒有提供內建方法來實現這一點,我們可以使用StringBuilder
來實現這個結果:
StringBuilder result = new StringBuilder();
for (int i = 0; i < s.length(); i += 2) {
result.append(s.charAt(i));
}
assertEquals("Hlo ol!", result.toString());
我們可以使用一個簡單的循環來對 Java 中的任何字串執行逐步切片。
6. 反轉字串
在 Python 中,我們可以有效地使用[::-1]
來反轉字串:
s[::-1] # "!dlroW ,olleH"
在 Java 中,我們可以再次使用StringBuilder
:
String reversed = new StringBuilder(s).reverse().toString();
assertEquals("!dlroW ,olleH", reversed);
或者,我們可以使用循環:
String reversed = "";
for (int i = s.length() - 1; i >= 0; i--) {
reversed += s.charAt(i);
}
assertEquals("!dlroW ,olleH", reversed);
但是, StringBuilder
效率更高,因為循環內的字串連接會建立多個不可變的字串對象,從而導致效能開銷。
7. 使用 Start/Stop 實現負步進
Python 允許使用負步長進行切片,即在指定範圍內以相反的順序提取元素。這對於反向選擇字元或在向後移動時跳過元素很有用。
Python:
s[-7:-1:2] # " ol"
Java 沒有內建對負步長切片的支持,因此我們將按照所需的順序手動進行迭代:
StringBuilder result = new StringBuilder();
for (int i = s.length() - 7; i < s.length() - 1; i += 2) {
result.append(s.charAt(i));
}
assertEquals(" ol", result.toString());
我們使用循環來提取字符,同時正確處理索引。
8. 結論
在本文中,我們看到雖然 Java 缺乏 Python 簡潔的字串切片語法,但我們可以使用substring()
、迴圈和StringBuilder
來實現類似的功能。透過利用這些技術,Java 開發人員可以以緊密模仿 Python 強大的切片功能的方式有效地操作字串。此外,Apache Commons Lang 等第三方函式庫提供了可以進一步簡化字串操作的實用程式。
與往常一樣,本文中提供的程式碼可在 GitHub 上取得。