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

时间:2012-05-20 04:12:39

标签: 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++;
       }
     }
   }

然而,由于这个原因,我总是会得到一个超出界限的数组。所以,我需要一些帮助或其他方式,实际上可以更有效。 我想过只使用Matches [a-zA-z],但是我不知道如何处理一个字符串,以便计算它出现的次数。

谢谢

8 个答案:

答案 0 :(得分:3)

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

int words = myString.split("\s+").length;

答案 1 :(得分:2)

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

  • 如果一行中有两个或更多空格怎么办?
  • 如果字符串以空格(或非字字符)开头或结尾怎么办?

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

  • 逐个浏览字符串中的字符。
  • 如果您当前正在扫描某个单词或者当前没有正在扫描单词,请记住一些事项。
  • 执行某些操作以确定何时输入或离开某个单词,并相应地增加计数器。

答案 2 :(得分: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;
}

答案 3 :(得分:1)

你得到IndexOutOfBoundsException的原因可能是因为当我为0时你的内部循环会有string.charAt(i-1),因为0-1是-1,所以会抛出异常。如果您确定您的方法可能有效,尽管您可以使用更有效的技术。

答案 4 :(得分:1)

直接寻址代码,你的第一个循环 i = 0作为 i 的第一个值,但是你要求

  

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

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

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

  

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

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

答案 5 :(得分:0)

   if (string.charAt(i-1) == alphabets.charAt(j)) {
       counter++;
   }

如果字符是某些字母字符,则递增计数器。如果 no 字母字符,则应增加它。

答案 6 :(得分:0)

就像这样使用

String s = "I am Juyel Rana, from Bangladesh";
int count = s.split(" ").length;

答案 7 :(得分:0)

以下程序将计算一个句子中的单词数。在此程序中,我们仅在空格之后计算字母。字母可以是小写或大写。由于人们不会以空格开头,因此我们在开头插入空格。我们还需要注意,任何特殊字符或数字都不应算作单词。

`import 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);
     }
    }`