5

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

    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++;
       }
     }
   }

但是,我总是会因此而使数组越界。所以,我需要一点帮助或其他更有效的方法。我想只使用 Matches [a-zA-z] 但我不确定如何处理一个 char 以与一个字符串相比较来计算它出现的次数。

谢谢

4

8 回答 8

3

您可以使用String.split()将字符串转换为数组,每个元素中包含一个单词。字数由数组的长度给出:

int words = myString.split("\s+").length;
于 2012-05-20T04:17:23.417 回答
2

这个问题比你的算法允许的稍微复杂一些。

  • 如果连续有两个或多个空格怎么办?
  • 如果字符串以空格(或非单词字符)开头或结尾怎么办?

这看起来像家庭作业,所以我不想提供任何代码。我建议一种更容易考虑的替代方法。

  • 逐个遍历字符串中的字符。
  • 如果您当前正在扫描单词或当前未扫描单词,请记住一些事情。
  • 做一些事情来确定你何时输入或留下一个词,并相应地增加你的计数器。
于 2012-05-20T04:30:14.167 回答
2

您建议使用像“[A-Za-z]”这样的正则表达式会很好。在拆分命令中,您将反向拆分,例如:

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;
}
于 2012-05-20T04:40:12.837 回答
1

您得到 an 的原因IndexOutOfBoundsException可能是因为当 i 为 0 时,您的内部循环string.charAt(i-1)将抛出异常,因为 0-1 为 -1。如果您修复了您的方法可能会起作用,尽管您可以使用更有效的技术。

于 2012-05-20T04:22:04.887 回答
1

直接处理代码,您的第一个循环将i =0 作为 i 的第一个值但随后您要求

string.charAt(i-1) = string.charAt(-1),

这是您的数组越界的来源。

第二个循环还有一个问题:

for(int j = 0; i < alphabets.length(); j++) {

您可能还想将撇号视为单词的一部分。

于 2012-05-20T04:27:23.300 回答
1

像这样使用

String s = "I am Juyel Rana, from Bangladesh";
int count = s.split(" ").length;
于 2018-03-20T07:33:50.533 回答
0
   if (string.charAt(i-1) == alphabets.charAt(j)) {
       counter++;
   }

如果字符是某个字母字符,则您正在递增计数器。如果它不是字母字符,您应该增加它。

于 2012-05-20T04:21:43.353 回答
0

下面的程序将计算一个句子中的单词数。在这个程序中,我们在空格之后计算字母。字母表可以是小写或大写。我们在开头插入一个空格,因为人们不会用空格开始一个句子。我们还需要注意不要将任何特殊字符或数字视为一个单词。

`导入java.util.Scanner;公共类 WordSent {

public static void main(String[] args) {

    Scanner in= new Scanner(System.in);
    System.out.println("Enter the sentence");
    String str=in.nextLine();
    String space=" ";
    String spaceword=space.concat(str);

    int count=0;
    for(int i=0; i<spaceword.length()-1;i++)
    {
        for (int k=0; k<=25; k++)
        {
        if(spaceword.charAt(i)==' '&& (spaceword.charAt(i+1)==((char)(65+k)) || spaceword.charAt(i+1)==((char)(97+k))))
        {
            count++;
        }
      }
     }
    System.out.println("Total number of words in a sentence are" +" :  "+   count);
     }
    }`
于 2020-03-06T15:52:24.120 回答