黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

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

計算Java字符串中的空格

更新時間:2022-05-24 10:52:37 來源:動力節(jié)點 瀏覽4060次

1. 概述

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

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

2. 示例輸入字符串

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

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

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

因此,我們的預(yù)期結(jié)果是:

int EXPECTED_COUNT = 9;

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

我們將首先使用 Java 標(biāo)準(zhǔn)庫來解決問題,然后我們將使用一些流行的外部庫來解決它。

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

3.使用Java標(biāo)準(zhǔn)庫

(1)經(jīng)典解決方案:循環(huán)和計數(shù)

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

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

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

@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 開始就已經(jīng)存在。

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

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

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

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

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

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

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

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

@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()方法搜索和查找空格非常簡單。但是,由于我們談?wù)摰氖钦齽t表達(dá)式,因此還有其他快速計算空格的方法。

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

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

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

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

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

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

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

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

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

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

現(xiàn)在,讓我們看看這個想法是否有效:

@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 愛好者中流行的框架。

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

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

(1)使用 Apache Commons Lang 3 庫

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

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

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

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

現(xiàn)在,讓我們創(chuàng)建一個單元測試來展示如何使用這個方法:

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

(2)使用Spring

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

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

這正是我們正在尋找的:

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

 

提交申請后,顧問老師會電話與您溝通安排學(xué)習(xí)

免費課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 欧美日韩国产一区二区三区播放 | 2020亚洲欧美日韩在线观看 | 亚洲欧美中文日韩在线 | 柠檬福利第一导航在线 | 日韩伦理剧在线观看 | 一个人看的www视频在线 | 久色成人| 18性夜影院午夜寂寞影院免费 | 2020年精品国产午夜福利在线 | 欧美综合精品 | 柠檬福利第一导航在线 | 午夜性爽快免费视频播放 | 国产亚洲欧美成人久久片 | 成人激情在线视频 | 91在线精品你懂的免费 | 丝瓜香蕉视频 | 中国videos18高清hd | 免费观看大片毛片 | 亚洲欧美另类国产综合 | 国产精品一区二区三区免费视频 | 亚洲图片欧洲图片aⅴ | 成年人在线免费观看网站 | 欧美日韩一区二区在线视频 | 一级毛片短视频 | 夜夜操狠狠操 | 欧美日本高清一本二本三本 | 天天爽夜夜爽人人爽免费 | 白丝丝袜高跟国产在线视频 | 国产亚洲女在线线精品 | 欧美激情免费观看一区 | 成人免费观看在线视频 | 在线观看嗯啊成人动作片 | 成人三级网址 | 日本a∨网站 | 麻豆一区| 99精品日韩 | 欧美人与物videos另类3d | 中国国产高清一级毛片 | 久久精品国产亚洲a不卡 | 亚洲国产精品乱码一区二区三区 | 午夜一区二区三区 |