4

我想使用方法来计算一个句子中的单词数。我写了这段代码,但我不太确定它为什么不起作用。不管我写什么,我只收到一个字数。如果你能告诉我如何修复我写的东西,而不是给我一个完全不同的想法,那就太好了:

import java.util.Scanner;

public class P5_7 
{
    public static int countWords(String str)
    {
        int count = 1;
        for (int i=0;i<=str.length()-1;i++)
        {
            if (str.charAt(i) == ' ' && str.charAt(i+1)!=' ')
            {
                count++;
            }
        }
        return count;
    }
    public static void main(String[] args)
    {
        Scanner in = new Scanner(System.in);
        System.out.print("Enter a sentence: ");
        String sentence = in.next();
        System.out.print("Your sentence has " + countWords(sentence) + " words.");
    }
}
4

17 回答 17

5

您需要阅读整行。而不是in.next();使用in.nextLine().

于 2013-04-10T16:12:08.260 回答
5

解决此问题的简单方法:

return str.split(" ").length;

或者更小心,这是您考虑多个空格的方式:

return str.split("\\s+").length;
于 2013-04-10T16:12:28.220 回答
4

试试这个简单的代码,使用 split() 和参数作为空格

int length=str.split(" ").length;

它将返回您句子中的单词数。

于 2014-05-13T05:43:20.597 回答
0

我就是这样做的:

它也可以正常工作

    import java.util.Scanner;


    public class countwords {

        public static void main(String args[]){
            Scanner in=new Scanner(System.in);
            System.out.println("Enter your sentence:[Try to ignore space at end]");
            String s=in.nextLine();
            System.out.println("Size of the string is "+s.length());
            int res=count(s);
            System.out.println("No of words in the given String --->>"+"  "+s+" "+"is"+" :"+res);
        }


        private static int count(String s) {
            // TODO Auto-generated method stub
            int count=0;
            if(s.charAt(0)!=' '){
                count++;
            }
            for(int i=0;i<s.length();i++){
                if((s.charAt(i)==' ')){
                    count++;
                }
            }
            return count;
        }


}

输出:这是我的世界富矿

字符串的大小为 23

给定字符串中的单词数 --->> 这是我的世界 bonazais :5

有一些错误尝试更正并重新发布

我发现一个更简单的方法是:

只需使用这个:

    // Read a string
String st=s.nextLine();

// Split string with space
String words[]=st.trim().split(" ");
于 2014-03-13T08:58:45.830 回答
0

i<=str.length()-1可能应该是,否则您将在(可用值为to )i<str.length()-1处获得 IndexOutOfBoundsException 。str.charAt(i+1)str.charAt(0)str.charAt(str.length()-1)

于 2013-04-10T16:12:47.583 回答
0

实际上,如果你输入这样的句子:

"Hello World"

您的代码String sentence = in.next();只会得到句子中的第一个单词,即Hello. 因此,您需要使用in.nextLine()inin.next()来获取整个句子,即Hello World.

于 2013-04-10T16:22:42.577 回答
0

请在 处检查边界条件str.charAt(i+1)StringIndexOutOfBoundsException当字符串以空格终止时,它可能会导致a 。

  1. 考虑字符串以 ' ' 开头的情况
  2. 字符串可以为空。
  3. “词”的定义可能不同。例如 - '1 2'。是1,2个字吗?

我知道您不想要替代方法,但 string.split(" ").length() 是一种更简单的开始方式。

于 2013-04-10T16:14:14.723 回答
0

如果你没有int count = 0;代替int count = 1;, 以防空句。如果您遇到 Java 错误,请将它们添加到您的问题中。

于 2013-04-10T16:11:20.703 回答
0

经过测试的方法 - 处理所有输入

public static void countwords() {
    String s = "  t    ";
    int count = 0;
    int length = s.length()-1;
    char prev = ' ';

    for(int i=length; i>=0; i--) {
        char c = s.charAt(i);
        if(c != prev && prev == ' ') {
            count++;
        }
        prev = c;
    }
    System.out.println(count);
}
于 2015-04-21T05:41:21.323 回答
0
This program works fine, 

step1:输入字符串

step2:将字符串拆分为单个单词存储在数组中

step3:返回数组的长度

public class P5_7 
{
public static int countWords(String str)
{
   String words[]=str.split(" ");
   int count=words.length;
    return count;
}
public static void main(String[] args)
{
    Scanner in = new Scanner(System.in);
    System.out.print("Enter a sentence: ");
    String sentence =in.nextLine();
    System.out.print("Your sentence has " + countWords(sentence) + " words.");
}

}

于 2014-03-13T09:09:41.467 回答
0

简单的逻辑是仅在之前没有任何空格的情况下计算空格。尝试这个:

public class WordCount 
{
    public static void main(String[] args) 
    {
        int word=1;
        Scanner s = new Scanner(System.in);
        System.out.println("Enter a string: ");
        String str=s.nextLine();
        for(int i=1;i<str.length();i++)
            {
                if(str.charAt(i)==' ' && str.charAt(i-1)!=' ')
                word++;
            }
       System.out.println("Total Number of words= "+word);
    }
}
于 2016-01-09T11:26:24.860 回答
0

这是另一种仅使用split, trim,equals方法来改进代码和性能的方法。

此代码也适用于空间。

public int countWords(String string){
    String strArr [] = string.split("\\s");
    int count = 0;
    for (String str: strArr) {
        if(!str.trim().equals("")){
            count++;
        }
    }
    return count;
}
于 2018-12-28T09:57:16.587 回答
0

导入 java.util.HashMap;

导入 java.util.Map;

导入 java.util.Scanner;

公共类 WordrCount {

public static void main(final String[] args) {
    System.out.println("Please Enter Your String: ");
    final Map<String, Integer> hm = new HashMap<String, Integer>();
    final Scanner sc = new Scanner(System.in);
    final String s1 = sc.nextLine();
    final String[] c1 = s1.split(" ");
    for (int i = 0; i < c1.length; i++) {
        if (!hm.containsKey(c1[i])) {
            hm.put(c1[i], (Integer)1);
        }// if
        else {
            hm.put(c1[i], hm.get(c1[i]) +(Integer) 1);

        }// else
    }// for

    System.out.println("The Total No Of Words: " + hm);

}// main

}// 字数

于 2016-08-04T09:30:34.510 回答
0

我建议使用BreakIterator。这是覆盖非标准语言(如日语)的最佳方式,其中没有空格分隔单词。

这里是字数统计的例子。

于 2017-11-07T09:16:35.203 回答
-1

使用此方法计算字符串中的单词数:-

    private int calculateWords(String s){

    int count=0;

    if(s.charAt(0)!=' ' || s.charAt(0)!=','){

        count++;

    }

    for(int i=1;i<s.length();i++){
            if((s.trim().charAt(i)==' ' && s.charAt(i+1)!=' ')  || (s.trim().charAt(i)==',' && s.charAt(i+1)!=',')){

                count++;
            }

    }

    return count;
}
于 2014-05-27T07:52:53.510 回答
-1
package test;
public class CommonWords {
    public static void main(String[] args) {
        String words = "1 2 3 44 55                            966 5                                   88              ";
        int count = 0;
        String[] data = words.split(" ");
        for (String string : data) {
            if (!string.equals("")) {
                count++;
            }
        }
        System.out.println(count);
    }
}
于 2018-06-26T06:55:01.137 回答
-1
class Words {
public static void main(String[] args) {

    String str="Hello World this is new";
    str=str.trim();
    int n=str.length();
    char a[]=new char[n];
    str.getChars(1,n,a,0);
    for (int i=0;i<str.length() ; i++){
        if(a[i]==' ') count++;
    }
    System.out.println("No. of words = "+(count+1));
}

}

于 2015-08-19T19:47:01.453 回答