【问题标题】:Java Beginner - Counting number of words in sentenceJava初学者 - 计算句子中的单词数
【发布时间】:2013-04-10 16:06:01
【问题描述】:

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

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.");
    }
}

【问题讨论】:

  • 怎么不工作了?是否有异常,或者只是输出不正确?
  • 在什么情况下不起作用?你能提供输入和输出的例子吗?
  • 您没有考虑极端情况,例如:字符串为空;结尾有空格;字符串为 NULL。单词分隔符也是“空白”,包括制表符、行尾等。您的算法还假设字符串中至少有一个单词。
  • 不管我最后只得到 1 个字。我只是一个初学者,所以所有这些例外都相对无关

标签: java methods


【解决方案1】:

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

【讨论】:

  • 上帝保佑! (不是真正的宗教,但仍然......)
【解决方案2】:

解决这个问题的简单方法:

return str.split(" ").length;

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

return str.split("\\s+").length;

【讨论】:

  • split("\\W+") even - 但是指定了操作而不是给我一个完全不同的想法...
  • 仍然 - 只有 1 个字。我认为方法很好,也许扫描仪输入有问题?
  • @user2266957 要使上述方法正常工作,必须在调用方法之前将整个文本读入单个字符串
【解决方案3】:

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

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

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

【讨论】:

    【解决方案4】:

    如果出现空白句子,您是否应该没有int count = 0; 而不是int count = 1;。如果您遇到 Java 错误,请将它们添加到您的问题中。

    【讨论】:

      【解决方案5】:

      i&lt;=str.length()-1 可能应该是 i&lt;str.length()-1,否则您将在 str.charAt(i+1) 处收到 IndexOutOfBoundsException(可用值是 str.charAt(0)str.charAt(str.length()-1))。

      【讨论】:

        【解决方案6】:

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

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

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

        【讨论】:

          【解决方案7】:

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

          "Hello World"
          

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

          【讨论】:

            【解决方案8】:

            这就是我的做法:

            它也很好用

                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(" ");
            

            【讨论】:

              【解决方案9】:
              This program works fine, 
              

              第一步:输入字符串

              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.");
              }
              

              }

              【讨论】:

                【解决方案10】:

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

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

                【讨论】:

                  【解决方案11】:

                  简单的逻辑是仅在之前没有任何空格时才计算空格。 试试这个:

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

                  【讨论】:

                    【解决方案12】:

                    导入 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
                    

                    }//字数

                    【讨论】:

                      【解决方案13】:

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

                      字数统计示例here

                      【讨论】:

                        【解决方案14】:

                        这是另外一种方法,仅使用splittrimequals 方法来改进代码和性能。

                        此代码也适用于空格。

                        public int countWords(String string){
                            String strArr [] = string.split("\\s");
                            int count = 0;
                            for (String str: strArr) {
                                if(!str.trim().equals("")){
                                    count++;
                                }
                            }
                            return count;
                        }
                        

                        【讨论】:

                          【解决方案15】:

                          使用此方法计算String中的单词数:-

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

                          【讨论】:

                            【解决方案16】:
                            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));
                            }
                            

                            }

                            【讨论】:

                            • 以上很容易理解。
                            【解决方案17】:
                            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);
                                }
                            }
                            

                            【讨论】:

                              猜你喜欢
                              • 1970-01-01
                              • 2018-01-21
                              • 2013-04-21
                              • 2015-08-18
                              • 1970-01-01
                              • 1970-01-01
                              • 2014-03-13
                              • 2013-01-30
                              • 1970-01-01
                              相关资源
                              最近更新 更多