大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 計算Java字符串中的空格

計算Java字符串中的空格

更新時間:2022-05-24 10:52:37 來源:動力節點 瀏覽4034次

1. 概述

當我們使用 Java 字符串時,有時我們想計算一個字符串中有多少個空格。

有多種方法可以得到結果。在這個快速教程中,我們將通過示例了解如何完成它。

2. 示例輸入字符串

首先,讓我們準備一個輸入字符串作為示例:

String INPUT_STRING = "  This string has nine spaces and a Tab:'	'";

上面的字符串包含九個空格和一個用單引號括起來的制表符。我們的目標是只計算給定輸入字符串中的空格字符。

因此,我們的預期結果是:

int EXPECTED_COUNT = 9;

接下來,讓我們探索各種解決方案以獲得正確的結果。

我們將首先使用 Java 標準庫來解決問題,然后我們將使用一些流行的外部庫來解決它。

最后,在本教程中,我們將介紹單元測試方法中的所有解決方案。

3.使用Java標準庫

(1)經典解決方案:循環和計數

這可能是解決問題的最直接的想法。

我們遍歷輸入字符串中的所有字符。此外,我們維護一個計數器變量,并在看到空格字符后遞增計數器。

最后,我們將獲得字符串中空格的數量:

@Test
void givenString_whenCountSpaceByLooping_thenReturnsExpectedCount() {
    int spaceCount = 0;
    for (char c : INPUT_STRING.toCharArray()) {
        if (c == ' ') {
            spaceCount++;
        }
    }
    assertThat(spaceCount).isEqualTo(EXPECTED_COUNT);
}

(2)使用 Java 8 的 Stream API

Stream API從 Java 8 開始就已經存在。

此外,從 Java 9 開始,String類中添加了一個新的chars()方法,用于將char值從String轉換為IntStream實例。

如果我們使用 Java 9 或更高版本,我們可以將這兩個功能結合起來以單行方式解決問題:

@Test
void givenString_whenCountSpaceByJava8StreamFilter_thenReturnsExpectedCount() {
    long spaceCount = INPUT_STRING.chars().filter(c -> c == (int) ' ').count();
    assertThat(spaceCount).isEqualTo(EXPECTED_COUNT);
}

(3)使用正則表達式的Matcher.find()方法

到目前為止,我們已經看到了通過搜索給定字符串中的空格字符來計數的解決方案。我們使用了character == ' ' 來檢查一個字符是否是一個空格字符。

正則表達式(Regex)是搜索字符串的另一個有力武器,Java 對 Regex 有很好的支持。

因此,我們可以將單個空格定義為模式,并使用Matcher.find()方法檢查是否在輸入字符串中找到了該模式。

此外,為了獲得空格數,每次找到模式時我們都會增加一個計數器:

@Test
void givenString_whenCountSpaceByRegexMatcher_thenReturnsExpectedCount() {
    Pattern pattern = Pattern.compile(" ");
    Matcher matcher = pattern.matcher(INPUT_STRING);
    int spaceCount = 0;
    while (matcher.find()) {
        spaceCount++;
    }
    assertThat(spaceCount).isEqualTo(EXPECTED_COUNT);
}

(4)使用String.replaceAll()方法

使用Matcher.find()方法搜索和查找空格非常簡單。但是,由于我們談論的是正則表達式,因此還有其他快速計算空格的方法。

我們知道我們可以使用String.replaceAll()方法進行“搜索和替換”。

因此,如果我們將輸入字符串中的所有非空格字符替換為空字符串,則輸入中的所有空格都將是結果。

所以,如果我們想得到計數,結果字符串的長度就是答案。接下來,讓我們嘗試一下這個想法:

@Test
void givenString_whenCountSpaceByReplaceAll_thenReturnsExpectedCount() {
    int spaceCount = INPUT_STRING.replaceAll("[^ ]", "").length();
    assertThat(spaceCount).isEqualTo(EXPECTED_COUNT);
}

如上面的代碼所示,我們只有一行來獲取計數。

值得一提的是,在String.replaceAll()調用中,我們使用了模式“[^ ]”而不是“\\S”。 這是因為我們想替換非空格字符而不僅僅是非空格字符。

(5)使用String.split() 方法

我們已經看到使用String.replaceAll()方法的解決方案簡潔緊湊。現在,讓我們看看解決問題的另一個想法:使用String.split()方法。

眾所周知,我們可以將一個模式傳遞給String.split()方法,并獲得一個由該模式拆分的字符串數組。

因此,我們的想法是,我們可以將輸入字符串拆分為一個空格。然后,原始字符串中的空格數將比字符串數組長度少一。

現在,讓我們看看這個想法是否有效:

@Test
void givenString_whenCountSpaceBySplit_thenReturnsExpectedCount() {
    int spaceCount = INPUT_STRING.split(" ").length - 1;
    assertThat(spaceCount).isEqualTo(EXPECTED_COUNT);
}

4. 使用外部庫

Apache Commons Lang 3庫廣泛用于 Java 項目。此外,Spring是 Java 愛好者中流行的框架。

這兩個庫都提供了一個方便的字符串實用程序類。

現在,讓我們看看如何使用這些庫計算輸入字符串中的空格。

(1)使用 Apache Commons Lang 3 庫

Apache Commons Lang 3 庫提供了一個StringUtil類,其中包含許多方便的與字符串相關的方法。

要計算字符串中的空格,我們可以使用此類中的countMatches()方法。

在我們開始使用StringUtil類之前,我們應該檢查該庫是否在類路徑中。我們可以在pom.xml中添加最新版本的依賴項:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.12.0</version>
</dependency>

現在,讓我們創建一個單元測試來展示如何使用這個方法:

@Test
void givenString_whenCountSpaceUsingApacheCommons_thenReturnsExpectedCount() {
    int spaceCount = StringUtils.countMatches(INPUT_STRING, " ");
    assertThat(spaceCount).isEqualTo(EXPECTED_COUNT);
}

(2)使用Spring

如今,很多 Java 項目都是基于 Spring 框架的。因此,如果我們使用 Spring,Spring 提供的一個不錯的字符串實用程序已經可以使用:StringUtils。

是的,它與 Apache Commons Lang 3 中的類同名。此外,它提供了一個countOccurrencesOf()方法來計算字符串中字符的出現次數。

這正是我們正在尋找的:

@Test
void givenString_whenCountSpaceUsingSpring_thenReturnsExpectedCount() {
    int spaceCount = StringUtils.countOccurrencesOf(INPUT_STRING, " ");
    assertThat(spaceCount).isEqualTo(EXPECTED_COUNT);
}

 

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 一区二区在线精品免费视频 | 爆操波多野结衣 | 国产精品久久久一区二区三区 | 国产精品videossex激情 | 久9久9精品视频在线观看 | 亚洲精品国产成人专区 | 女十八毛片| 中文字幕一区二区三区亚洲精品 | 在线观看视频一区 | 国产精品播放 | 久久九九精品一区二区 | 亚洲国产欧美日韩一区二区三区 | 国产精品资源 | 久草热久草在线视频 | 国产精品成人免费视频不卡 | 亚洲韩精品欧美一区二区三区 | 欧美性猛片xxxxⅹ免费 | 久久精品7| 亚洲视屏在线观看 | a毛片在线 | 欧洲精品视频在线观看 | 免费在线观看的毛片 | 老司机午夜精品视频在线观看免费 | www.久久色 | 亚洲一区 在线播放 | 91精品欧美产品免费观看 | 国产免费久久精品99久久 | 欧美综合中文字幕久久 | 天天襙 | 香蕉综合在线 | 伊人情人综合成人久久网小说 | 国产成人在线免费 | 国产v片成人影院在线观看 国产v视频 | 日韩毛片在线免费观看 | 久久综合九色综合亚洲 | 国产二区在线播放 | 成人午夜爱爱爱爱爱 | 色国产精品| 国产精品女仆装在线播放 | 久久久久久久国产精品影院 | 久久国产国内精品对话对白 |