统计字符串里包含有多少个单词,这是Java代码常用的场景。本文介绍三种简单的方法来对其进行统计。这里所谓的单词,是指连续的非空字符串。如“Hello”则为一个词,“I love Guangzhou”则为三个词。
方法一:使用split
在类String中,有split()这个方法,可以将字符进行分割。可以通过对字符串以空白字符进行分割,则可以得到结果。
public int countWithSplit(String str) {if (Strings.isNullOrEmpty(str)) {return 0;}return str.split("\\s+").length;
}
代码中"\\s+"为正则表达式,表示所有的空白字符。
方法二:使用StringTokenizer
public int countWithStringTokenizer(String str) {if (Strings.isNullOrEmpty(str)) {return 0;}StringTokenizer tokenizer = new StringTokenizer(str);return tokenizer.countTokens();
}
StringTokenizer是一个很有用的类,构造函数有三个:
1. StringTokenizer(String str) :构造一个用来解析 str 的 StringTokenizer 对象。java 默认的分隔符是空格("")、制表符(\t)、换行符(\n)、回车符(\r)。
2. StringTokenizer(String str, String delim) :构造一个用来解析 str 的 StringTokenizer 对象,并提供一个指定的分隔符。
3. StringTokenizer(String str, String delim, boolean returnDelims) :构造一个用来解析 str 的 StringTokenizer 对象,并提供一个指定的分隔符,同时,指定是否返回分隔符。
方法三:使用原始的char判断
public int countWithChar(String str) {if (Strings.isNullOrEmpty(str)) {return 0;}int wordCount &#61; 0;boolean isWord &#61; false;int endOfLine &#61; str.length() - 1;char[] chars &#61; str.toCharArray();for (int i &#61; 0; i < chars.length; i&#43;&#43;) {// 如果是非空字符, word &#61; true.if (isWord(chars[i]) && i !&#61; endOfLine) {isWord &#61; true;// 非空字符后遇到空字符&#xff0c;则数量加1} else if (!isWord(chars[i]) && isWord) {wordCount&#43;&#43;;isWord &#61; false;// 非空字符后遇到行尾} else if (isWord(chars[i]) && i &#61;&#61; endOfLine) {wordCount&#43;&#43;;}}return wordCount;
}private boolean isWord(char c) {return c !&#61; &#39; &#39;&& c !&#61; &#39;\t&#39;&& c !&#61; &#39;\n&#39;&& c !&#61; &#39;\r&#39;&& c !&#61; &#39;\f&#39;;
}
测试代码
简单写了几个测试用例&#xff0c;测试通过。
public class CountWordTest {private CountWord countWord &#61; new CountWord();&#64;Testpublic 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));}
}
总结
这三种方法都非常简单&#xff0c;没有什么技术难点&#xff0c;用到了String、StringTokenizer、正则、Guava、JUnit等&#xff0c;非常基础。
---------THE END----------
觉得不错就扫码关注公众号呗&#xff0c;更多精彩还在后面哦~
学好技术&#xff0c;过好生活。