如何计算字符串中的单词数?

nfn*_*nmy 5 java string

我需要计算单词的数量,我假设正确的方法是通过计算字符串中前一个字符不是字母(即其他字符)的次数,因为这是假设会有字符串中的冒号,空格,制表符和其他符号.所以起初我的想法是遍历每个角色并计算你不会得到一个字母表的字母数

    for(int i = 0; i < string.length(); i++) {
      for(int j = 0; i < alphabets.length(); j++) {
       if (string.charAt(i-1) == alphabets.charAt(j)) {
           counter++;
       }
     }
   }
Run Code Online (Sandbox Code Playgroud)

但是,由于这个原因,我总是会得到一个数组越界.所以,我需要一些帮助或其他方式,实际上可以更有效.我想只使用匹配[a-zA-z],但我不知道如何处理一个字符串,以计算它发生的次数.

谢谢

pha*_*ers 2

您建议使用“[A-Za-z]”这样的正则表达式,效果很好。在 split 命令中,您可以进行相反的拆分,例如:

String[]words = "示例测试:一、二、三".split("[^A-Za-z]+");

编辑:如果您只是寻求原始速度,这会更快地完成工作。

public static int countWords(String str) {
    char[] sentence = str.toCharArray();
    boolean inWord = false;
    int wordCt = 0;
    for (char c : sentence) {
        if (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z') {
            if (!inWord) {
                wordCt++;
                inWord = true;
            }
        } else {
            inWord = false;
        }
    }
    return wordCt;
}
Run Code Online (Sandbox Code Playgroud)