欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java如何獲取字符串單詞個(gè)數(shù)

 更新時(shí)間:2023年03月01日 10:31:45   作者:黃寶康  
這篇文章主要介紹了Java如何獲取字符串單詞個(gè)數(shù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Java獲取字符串單詞個(gè)數(shù)

 public static int getWordCount(String content){
        int count = 0;
        String cn_words = content.replaceAll("[^(\\u4e00-\\u9fa5,。《》?;'‘:“”【】、)(……¥!·)]", "");
        int cn_words_count = cn_words.length();
        String non_cn_words = content.replaceAll("[^(a-zA-Z0-9`\\-=\';.,/~!@#$%^&*()_+|}{\":><?\\[\\])]", " ");
        int non_cn_words_count = 0;
        String[] temp = non_cn_words.split(" ");
        for(String ch:temp){
            if(ch.trim().length() != 0) non_cn_words_count++;
        }
        count = cn_words_count + non_cn_words_count;
        return count;
    }
    public static void main(String[] args) {
		System.out.println(getWordCount("我愛(ài)你 zhanglulu _")); // 輸出5,單詞是以空格分開(kāi),所以這里我愛(ài)你三個(gè)字加一個(gè)單詞zhanglulu和一個(gè)下劃線,空格不算。
	}

統(tǒng)計(jì)String單詞數(shù)的三種方法

統(tǒng)計(jì)字符串里包含有多少個(gè)單詞,這是Java代碼常用的場(chǎng)景。介紹三種簡(jiǎn)單的方法來(lái)對(duì)其進(jìn)行統(tǒng)計(jì)。這里所謂的單詞,是指連續(xù)的非空字符串。如“Hello”則為一個(gè)詞,“I love Guangzhou”則為三個(gè)詞。

方法一:使用split

在類(lèi)String中,有split()這個(gè)方法,可以將字符進(jìn)行分割。可以通過(guò)對(duì)字符串以空白字符進(jìn)行分割,則可以得到結(jié)果。

public int countWithSplit(String str) {
? ? if (Strings.isNullOrEmpty(str)) {
? ? ? ? return 0;
? ? }
? ? return str.split("\\s+").length;
}

代碼中"\\s+"為正則表達(dá)式,表示所有的空白字符。

方法二:使用StringTokenizer

public int countWithStringTokenizer(String str) {
? ? if (Strings.isNullOrEmpty(str)) {
? ? ? ? return 0;
? ? }
? ? StringTokenizer tokenizer = new StringTokenizer(str);
? ? return tokenizer.countTokens();
}

StringTokenizer是一個(gè)很有用的類(lèi),構(gòu)造函數(shù)有三個(gè):

  • 1. StringTokenizer(String str) :構(gòu)造一個(gè)用來(lái)解析 str 的 StringTokenizer 對(duì)象。java 默認(rèn)的分隔符是空格("")、制表符(\t)、換行符(\n)、回車(chē)符(\r)。
  • 2. StringTokenizer(String str, String delim) :構(gòu)造一個(gè)用來(lái)解析 str 的 StringTokenizer 對(duì)象,并提供一個(gè)指定的分隔符。
  • 3. StringTokenizer(String str, String delim, boolean returnDelims) :構(gòu)造一個(gè)用來(lái)解析 str 的 StringTokenizer 對(duì)象,并提供一個(gè)指定的分隔符,同時(shí),指定是否返回分隔符。

方法三:使用原始的char判斷

public int countWithChar(String str) {
? ? if (Strings.isNullOrEmpty(str)) {
? ? ? ? return 0;
? ? }
? ? int wordCount = 0;
? ? boolean isWord = false;
? ? int endOfLine = str.length() - 1;
? ? char[] chars = str.toCharArray();
?
? ? for (int i = 0; i < chars.length; i++) {
? ? ? ? // 如果是非空字符, word = true.
? ? ? ? if (isWord(chars[i]) && i != endOfLine) {
? ? ? ? ? ? isWord = true;
?
? ? ? ? ? ? // 非空字符后遇到空字符,則數(shù)量加1
? ? ? ? } else if (!isWord(chars[i]) && isWord) {
? ? ? ? ? ? wordCount++;
? ? ? ? ? ? isWord = false;
? ? ? ? ? ? // 非空字符后遇到行尾
? ? ? ? } else if (isWord(chars[i]) && i == endOfLine) {
? ? ? ? ? ? wordCount++;
? ? ? ? }
? ? }
? ? return wordCount;
}
?
private boolean isWord(char c) {
? ? return c != ' '
? ? ? ? ? ? && c != '\t'
? ? ? ? ? ? && c != '\n'
? ? ? ? ? ? && c != '\r'
? ? ? ? ? ? && c != '\f';
}

測(cè)試代碼

簡(jiǎn)單寫(xiě)了幾個(gè)測(cè)試用例,測(cè)試通過(guò)。

public class CountWordTest {
? ? private CountWord countWord = new CountWord();
?
? ? @Test
? ? public void test() {
? ? ? ? testStringCount(null, 0);
? ? ? ? testStringCount("", 0);
? ? ? ? testStringCount(" ", 0);
? ? ? ? testStringCount(" \t\r\n\f", 0);
? ? ? ? testStringCount("0", 1);
? ? ? ? testStringCount("abcdef", 1);
? ? ? ? testStringCount("a b c", 3);
? ? ? ? testStringCount("a,b,c", 1);
? ? ? ? testStringCount("a\rb\nc", 3);
? ? ? ? testStringCount("a,b\t\nc", 2);
? ? }
?
? ? private void testStringCount(String str, int expectedCount) {
? ? ? ? assertEquals(expectedCount, countWord.countWithSplit(str));
? ? ? ? assertEquals(expectedCount, countWord.countWithStringTokenizer(str));
? ? ? ? assertEquals(expectedCount, countWord.countWithChar(str));
? ? }
}

這三種方法都非常簡(jiǎn)單,沒(méi)有什么技術(shù)難點(diǎn),用到了String、StringTokenizer、正則、Guava、JUnit等,非?;A(chǔ)。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringCloud Alibaba項(xiàng)目實(shí)戰(zhàn)之nacos-server服務(wù)搭建過(guò)程

    SpringCloud Alibaba項(xiàng)目實(shí)戰(zhàn)之nacos-server服務(wù)搭建過(guò)程

    Nacos 是阿里巴巴推出來(lái)的一個(gè)新開(kāi)源項(xiàng)目,這是一個(gè)更易于構(gòu)建云原生應(yīng)用的動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、配置管理和服務(wù)管理平臺(tái)。本章節(jié)重點(diǎn)給大家介紹SpringCloud Alibaba項(xiàng)目實(shí)戰(zhàn)之nacos-server服務(wù)搭建過(guò)程,感興趣的朋友一起看看吧
    2021-06-06
  • Java 如何判斷Integer類(lèi)型的值是否相等

    Java 如何判斷Integer類(lèi)型的值是否相等

    這篇文章主要介紹了Java 如何判斷Integer類(lèi)型的值是否相等操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Maven腳手架如何基于jeecg實(shí)現(xiàn)快速開(kāi)發(fā)

    Maven腳手架如何基于jeecg實(shí)現(xiàn)快速開(kāi)發(fā)

    這篇文章主要介紹了Maven腳手架如何基于jeecg實(shí)現(xiàn)快速開(kāi)發(fā),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • JDK8中新增的原子性操作類(lèi)LongAdder詳解

    JDK8中新增的原子性操作類(lèi)LongAdder詳解

    這篇文章主要給大家介紹了關(guān)于JDK8中新增的原子性操作類(lèi)LongAdder的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-08-08
  • Java并發(fā)編程之阻塞隊(duì)列(BlockingQueue)詳解

    Java并發(fā)編程之阻塞隊(duì)列(BlockingQueue)詳解

    這篇文章主要介紹了詳解Java阻塞隊(duì)列(BlockingQueue)的實(shí)現(xiàn)原理,阻塞隊(duì)列是Java util.concurrent包下重要的數(shù)據(jù)結(jié)構(gòu),有興趣的可以了解一下
    2021-09-09
  • Java Swing實(shí)現(xiàn)JTable檢測(cè)單元格數(shù)據(jù)變更事件的方法示例

    Java Swing實(shí)現(xiàn)JTable檢測(cè)單元格數(shù)據(jù)變更事件的方法示例

    這篇文章主要介紹了Java Swing實(shí)現(xiàn)JTable檢測(cè)單元格數(shù)據(jù)變更事件的方法,結(jié)合完整實(shí)例形式分析了Swing實(shí)現(xiàn)JTable檢測(cè)單元格數(shù)據(jù)變更事件過(guò)程中出現(xiàn)的問(wèn)題與相關(guān)解決方法,需要的朋友可以參考下
    2017-11-11
  • Servlet會(huì)話(huà)技術(shù)基礎(chǔ)解析

    Servlet會(huì)話(huà)技術(shù)基礎(chǔ)解析

    這篇文章主要介紹了Servlet會(huì)話(huà)技術(shù)基礎(chǔ)解析,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • Mybatis-plus配置多數(shù)據(jù)源,連接多數(shù)據(jù)庫(kù)方式

    Mybatis-plus配置多數(shù)據(jù)源,連接多數(shù)據(jù)庫(kù)方式

    這篇文章主要介紹了Mybatis-plus配置多數(shù)據(jù)源,連接多數(shù)據(jù)庫(kù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • 讓Java代碼更高效

    讓Java代碼更高效

    這篇文章主要介紹了如何讓你的Java代碼更高效,讓Java跑得更快,感興趣的小伙伴們可以參考一下
    2015-09-09
  • springboot通過(guò)jar包啟動(dòng)中文日志亂碼問(wèn)題及解決

    springboot通過(guò)jar包啟動(dòng)中文日志亂碼問(wèn)題及解決

    這篇文章主要介紹了springboot通過(guò)jar包啟動(dòng)中文日志亂碼問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06

最新評(píng)論