如何從字串中刪除數字
1. 概述
在本教程中,我們將探索從Strings
中刪除數字的各種方法。
我們將從正規表示式開始,示範如何利用String
類別的replaceAll()
方法以及如何使用Pattern
和Matcher
類別。我們也將介紹 Apache Commons Lang 庫如何處理此任務。除了正規表示式之外,我們還將研究使用迴圈和StringBuilder
更手動的方法。最後,我們將深入研究如何使用Character
Streams
來實現此目的。
2. 使用正規表示式
正規表示式或正規表示式提供了一種強大而靈活的方式來搜尋、匹配和操作文字。 java.util.regex
套件支援正規表示式。正規表示式提供了一種高效、簡潔的解決方案,用於從Strings.
要從String
中刪除數字,我們需要一個識別數字的正規表示式模式。在正規表示式中, \d
符合任何數字 (0-9)。透過使用\d
,我們可以定位String
中的所有數字並將它們替換為空String
。
為了保持程式碼的簡潔和可讀性,我們將使用常數來表示常見值,例如輸入String
、正規表示式模式和預期結果:
static final String INPUT_STRING = "M3a9n2y n8u6m7b5e4r0s1";
static final String EXPECTED_STRING = "Many numbers";
static final String DIGIT_REGEX = "\\d";
讓我們從正規表達式方法開始。
2.1.使用String
的replaceAll()
String
類別的replaceAll()
方法允許取代String
中與給定正規表示式模式相符的部分。透過為replaceAll()
提供正規表示式模式,我們可以根據需要有效地修改String
:
@Test
void whenUsingReplaceAll_thenGetExpectedResult() {
String updatedString = INPUT_STRING.replaceAll(DIGIT_REGEX, "");
assertEquals(EXPECTED_STRING, updatedString);
}
此範例示範了使用具有正規表示式模式的replaceAll()
方法來操作Strings
是多麼簡單。
2.2.使用Pattern
和Matcher
java.util.regex
套件中的Pattern
和Matcher
類別提供了用於處理正規表示式的高階且靈活的 API。
透過使用這些類,我們可以使用Pattern
編譯正規表示式模式,並使用Matcher
將其應用到String
,然後可以使用 Matcher 執行各種操作,例如查找、替換或拆分文字:
@Test
void whenUsingPatternAndMatcher_thenGetExpectedResult() {
Pattern pattern = Pattern.compile(DIGIT_REGEX);
Matcher matcher = pattern.matcher(INPUT_STRING);
String updatedString = matcher.replaceAll("");
assertEquals(EXPECTED_STRING, updatedString);
}
前面的範例說明了使用Pattern
和Matcher
類別進行正規表示式操作的強大功能。透過了解如何使用這些類別編譯和應用正規表示式模式,我們可以執行更複雜和更精確的String
操作。
2.3.使用 Apache Commons Lang
Apache Commons Lang 為java.lang
套件提供了實用程式類別庫,增強了核心 Java 功能。其中一個類別RegexUtils
提供了用於正規表示式操作的有用方法。
要使用 Apache Commons Lang,我們在pom.xml
檔案中新增commons-lang3依賴項:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.14.0</version>
</dependency>
要使用 Apache Commons Lang 從String
中刪除數字,我們可以結合使用RegexUtils
類別和正規表示式模式:
@Test
void whenUsingApacheCommonsLang_thenGetExpectedResult() {
String updatedString = RegExUtils.replacePattern(INPUT_STRING, DIGIT_REGEX, "");
assertEquals(EXPECTED_STRING, updatedString);
}
當我們使用 Apache Commons Lang 時,我們可以用最少的程式碼簡化Strings
操作。
3.使用迴圈和StringBuilder
將for
迴圈與StringBuilder
結合使用提供了一種從String
中刪除數字的簡單方法。此方法涉及迭代String
中的每個Character
,檢查它是否是數字,然後將非數字Characters
附加到StringBuilder
:
@Test
void whenUsingForLoop_thenGetExpectedResult() {
StringBuilder sb = new StringBuilder();
for (char ch : INPUT_STRING.toCharArray()) {
if (!Character.isDigit(ch)) {
sb.append(ch);
}
}
assertEquals(EXPECTED_STRING, sb.toString());
}
前面的程式碼示範了一種使用基本循環結構來操作Strings
簡單而有效的方法。我們透過手動迭代和附加Characters
來獲得對String
處理邏輯的細粒度控制。
4. 使用Character
Streams
Stream
提供了一種現代而簡潔的方式來處理資料集合和序列。我們可以使用Character
Streams
有效地過濾和操作String
中的Characters
。在此範例中,我們使用Stream
來刪除String
中的所有數字:
@Test
void whenUsingCharacterStream_thenGetExpectedResult() {
String updatedString = INPUT_STRING.chars()
.filter(c -> !Character.isDigit(c))
.mapToObj(c -> (char) c)
.map(String::valueOf)
.collect(Collectors.joining());
assertEquals(EXPECTED_STRING, updatedString);
}
前面的程式碼示範了使用Stream
API 為我們的問題創建乾淨高效的解決方案的優雅。
5. 結論
在本文中,我們探索了從Strings
中刪除數字的多種方法,包括使用正規表示式與replaceAll()
以及Pattern
和Matcher
類,利用Stream
API 實現現代方法,以及使用StringBuilder
的傳統for
循環以實現清晰和簡單。每種方法都具有獨特的優勢,從正規表示式的強大靈活性到Streams
的函數式風格以及循環的簡單本質,為String
操作提供了通用的解決方案。
與往常一樣,原始碼可以在 GitHub 上取得。