2013-04-10 2 views
3

Я полагаю, что для того, чтобы подсчитать количество слов в предложении, я использую методы. Я написал этот код, и я не совсем уверен, почему он не работает. Неважно, что я пишу, я получаю только 1 слово. Если бы вы могли сказать мне, как исправить то, что я написал, а не дать мне совершенно другую мысль, что было бы здорово:Java Beginner - подсчет количества слов в предложении

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

Как это работает? Есть ли исключение или просто неправильный вывод? –

+0

Каким образом это не работает? Можете ли вы привести примеры ввода и вывода? – Henrik

+1

Вы не учитываете угловые случаи, такие как: строка пуста; в конце есть пробелы; строка NULL. Также разделителями слов являются «пробелы», которые включают вкладки, окончания строк и т. Д. Также ваш алгоритм предполагает, что в строке есть хотя бы одно слово. –

ответ

4

Вам необходимо прочитать целую строку. Вместо in.next(); используйте in.nextLine().

+0

бог благослови! (не очень религиозный, но все же ...) – user2266957

0

Если вы не имеете int count = 0; вместо , в случае пустых фраз. Если вы получаете ошибки Java, не могли бы вы добавить их в свой вопрос.

4

простой способ решить эту проблему:

return str.split(" ").length; 

Или быть более осторожным, это то, как вы бы принять во внимание более одного пробельные:

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

'split (" \\ W + ")' even - но op defined *, а не дать мне совершенно другую идею * ... – assylias

+0

еще - всего 1 слово. Я думаю, что метод в порядке, может быть, что-то не так со входом Scanner? – user2266957

+0

@ user2266957 Для того, чтобы вышеизложенное работало, весь текст должен быть прочитан в одну строку перед вызовом метода –

0

i<=str.length()-1 следует, вероятно, i<str.length()-1 или вы получите IndexOutOfBoundsException в str.charAt(i+1) (доступные значения: str.charAt(0) - str.charAt(str.length()-1)).

0

Проверьте граничные условия на str.charAt(i+1). Это может привести к StringIndexOutOfBoundsException, когда строка заканчивается пробелом.

  1. счета за исключением случаев, когда строка начинается с символа «»
  2. Строка может быть пустым.
  3. Определение слова может отличаться. Например - «1 2». Есть 1,2 слова?

Я знаю, что вы не хотите альтернативного метода, но string.split ("") .length() - это более простой способ запуска.

0

На самом деле, если вы вводите фразу, как:

"Hello World" 

код String sentence = in.next(); будет только первое слово в предложении, т.е., Hello. Итак, вам нужно использовать in.nextLine() вместо in.next(), чтобы получить все предложение i.e., Hello World.

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


} 

ВЫВОД: Это мой мир bonaza

Размер строки составляет 23

Нет слов в данной строке --- >> это мой мир bonazais: 5

Есть некоторые ошибки, попробуйте исправить их и перепечатывать

более простой способ, что я нашел:

Просто используйте:

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

// Split string with space 
String words[]=st.trim().split(" "); 
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."); 
} 

}

1

Попробуйте этот простой код с расколом() и аргумент в качестве пространств

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

Она возвращает количество слов в вашем предложении.

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

}

+0

Вышеописание очень легко понять. – Navyanth

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

} // WordCount

0

Я хотел бы предложить использовать BreakIterator. Это лучший способ охватить нестандартные языки, такие как японский, где нет пробелов, которые отделяют слова.

Пример подсчета слов here.

Смежные вопросы