更新時(shí)間:2022-08-11 11:34:21 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽2813次
在本Java教程中,動(dòng)力節(jié)點(diǎn)小編將帶著大家一起研究可以在 Java中刪除或替換部分字符串的各種方法。
我們將探索使用 String API 刪除和/或替換子字符串,然后使用 StringBuilder API,最后使用 Apache Commons 庫(kù)的 StringUtils類。
替換子字符串的最簡(jiǎn)單直接的方法之一是使用 String 類的 replace 、replaceAll 或 replaceFirst 。
replace()方法有 兩個(gè)參數(shù)——目標(biāo)和替換文本:
String master = "Hello World Baeldung!";
String target = "Baeldung";
String replacement = "Java";
String processed = master.replace(target, replacement);
assertTrue(processed.contains(replacement));
assertFalse(processed.contains(target));
上面的代碼片段將產(chǎn)生這個(gè)輸出:
Hello World Java!
如果在選擇目標(biāo)時(shí)需要正則表達(dá)式,那么 replaceAll()或 replaceFirst()應(yīng)該是選擇的方法。顧名思義, replaceAll() 將替換每個(gè)匹配的匹配項(xiàng),而 replaceFirst()將替換第一個(gè)匹配的匹配項(xiàng):
String master2 = "Welcome to Baeldung, Hello World Baeldung";
String regexTarget = "(Baeldung)$";
String processed2 = master2.replaceAll(regexTarget, replacement);
assertTrue(processed2.endsWith("Java"));
processes2的值將是:
Welcome to Baeldung, Hello World Java
這是因?yàn)樽鳛?regexTarget提供的正則表達(dá)式只會(huì)匹配最后一次出現(xiàn)的 Baeldung。 在上面給出的所有示例中,我們可以使用空替換,它會(huì)有效地從master中刪除一個(gè)目標(biāo)。
我們還可以使用 StringBuilder類在 Java 中操作文本。 這里的兩個(gè)方法是 delete()和 replace()。
我們可以從現(xiàn)有的String構(gòu)造 StringBuilder 的實(shí)例,然后使用上述方法根據(jù)需要執(zhí)行String操作:
String master = "Hello World Baeldung!";
String target = "Baeldung";
String replacement = "Java";
int startIndex = master.indexOf(target);
int stopIndex = startIndex + target.length();
StringBuilder builder = new StringBuilder(master);
現(xiàn)在我們可以 使用 delete() 刪除目標(biāo):
builder.delete(startIndex, stopIndex);
assertFalse(builder.toString().contains(target));
我們也可以使用 replace()來(lái)更新 master:
builder.replace(startIndex, stopIndex, replacement);
assertTrue(builder.toString().contains(replacement));
使用StringBuilder 和 String API的一個(gè)明顯區(qū)別 是我們必須自己獲取 目標(biāo) String的開(kāi)始和結(jié)束索引。
我們將考慮的另一種方法是 Apache Commons 庫(kù)。
首先,讓我們將所需的依賴項(xiàng)添加到我們的項(xiàng)目中:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
可以在此處找到該庫(kù)的最新版本。
StringUtils 類具有替換String的子字符串的方法:
String master = "Hello World Baeldung!";
String target = "Baeldung";
String replacement = "Java";
String processed = StringUtils.replace(master, target, replacement);
assertTrue(processed.contains(replacement));
eplace()有一個(gè)重載變體,它接受一個(gè)整數(shù) max參數(shù),該參數(shù)確定要替換的出現(xiàn)次數(shù)。如果不區(qū)分大小寫,我們也可以使用replaceIgnoreCase():
String master2 = "Hello World Baeldung!";
String target2 = "baeldung";
String processed2 = StringUtils.replaceIgnoreCase(master2, target2, replacement);
assertFalse(processed2.contains(target));
在最后一個(gè)示例中,我們將學(xué)習(xí)如何替換String中的確切單詞。
執(zhí)行此替換的直接方法是使用帶有單詞邊界的正則表達(dá)式。
單詞邊界正則表達(dá)式是\b。在這個(gè)正則表達(dá)式中包含所需的單詞只會(huì)匹配精確的出現(xiàn)。
首先,讓我們看看如何在 String API 中使用這個(gè)正則表達(dá)式:
String sentence = "A car is not the same as a carriage, and some planes can carry cars inside them!";
String regexTarget = "\\bcar\\b";
String exactWordReplaced = sentence.replaceAll(regexTarget, "truck");
exactWordReplaced字符串包含:
"A truck is not the same as a carriage, and some planes can carry cars inside them!"
只有確切的詞將被替換。請(qǐng)注意,在 Java 中使用正則表達(dá)式時(shí),總是需要對(duì)反斜杠進(jìn)行轉(zhuǎn)義。
另一種替換方法是使用 Apache Commons Library 中的RegExUtils類,正如我們?cè)谏弦还?jié)中看到的那樣,它可以作為依賴項(xiàng)添加:
String regexTarget = "\\bcar\\b";
String exactWordReplaced = RegExUtils.replaceAll(sentence, regexTarget, "truck");
雖然這兩種方法都會(huì)產(chǎn)生相同的結(jié)果,但決定使用哪一種將取決于我們的具體情況。如果大家想了解更多相關(guān)知識(shí),可以關(guān)注一下動(dòng)力節(jié)點(diǎn)的Java視頻教程,里面的課程內(nèi)容細(xì)致全面,通俗易懂,很適合沒(méi)有基礎(chǔ)的小伙伴學(xué)習(xí),希望對(duì)大家能夠有所幫助。
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743