繁体   English   中英

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

[英]How do I count the number of words in a 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++;
       }
     }
   }

但是,由于这个原因,我总是会得到一个数组越界。 所以,我有点需要一些帮助或其他实际上可以更有效的方法。 我想过只使用匹配 [a-zA-z] 但我不确定如何处理一个字符以与字符串相媲美来计算它出现的次数。

谢谢

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

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

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

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

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

  • 逐个遍历字符串中的字符。
  • 如果您当前正在扫描一个单词,或者您当前没有扫描一个单词,请记住一些事情。
  • 做一些事情来确定你何时输入或离开一个词,并相应地增加你的计数器。

您建议使用像“[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;
}

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

直接将代码地址,你的第一个循环的I = 0作为的第一个值,但随后你问

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

这就是数组越界的来源。

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

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

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

像这样使用

String s = "I am Juyel Rana, from Bangladesh";
int count = s.split(" ").length;
   if (string.charAt(i-1) == alphabets.charAt(j)) {
       counter++;
   }

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM