2015-09-17 3 views
1

Я хочу написать программу, которая подсчитывает количество слов, начинающихся с заглавных букв. Это только нет. Из заглавной буквы не слова попробуйте эту строку «Привет, вы были yOu» По моему коду вывод будет 3 Но их только 1 слово, которое начинается с заглавной буквы «Привет» ... так как я могу решить эти проблема. Пожалуйста, помогите мне с этим.java-программа для подсчета количества слов, начинающихся с заглавных букв

import java.util.*; 

class Cap 
{ 
    public static void main(String m[]) 
    { 
     Scanner in=new Scanner(System.in); 
     String s=new String(); 
     System.out.println("Enter a line:"); 
     s=in.nextLine(); 
     char c; 
     int ct=0; 
     for(int i=0;i<s.length();i++) 
     { 
      c=s.charAt(i); 
      if(c>=65 && c<=90) 
      { 
       ct++; 

      } 
     } 
     System.out.println("total number of words start with capital letters are :"+ct); 
    } 
} 

ответ

0

В настоящее время вы считаете все заглавные буквы, которые введены. Что вы хотите сделать, так это разделить строку на пробел и проверить только первую букву, если она является капиталом.

public static void main(String[] args) { 
    Scanner in=new Scanner(System.in); 
    String s; 
    System.out.println("Enter a line:"); 
    s=in.nextLine(); 
    int ct=0; 
    for(String str: s.split(" ")) { 
     if(str.charAt(0)>=65 && str.charAt(0)<=90) 
     { 
      ct++; 

     } 
    } 
    System.out.println("total number of words start with capital letters are :"+ct); 
} 
2

Вы должны лучше использовать scanner.next();, который возвращает маркер до белого пространства в другом образе слова .Теперьте, вы можете проверить первый символ строки, возвращаемый next() в верхнем регистре, или нет.

Для постановки Это StackOverflow вы будете иметь три маркера, This, is и StackOverflow, и вы можете использовать String.charAt(0) на этом String.

Кроме того, вы можете просто использовать метод Character.isUpperCase, чтобы проверить, находится ли символ в верхнем регистре или нет.

+0

Ясный и простой, лучший ответ имо. – Phantomazi

0

Вы сравниваете каждый character.Instead вы можете добавить пробел в начале строки и проверять каждый символ после пространства, если он находится в верхнем регистре.

Scanner in = new Scanner(System. in); 
String s = new String(); 
System.out.println("Enter a line:"); 
s = " " + in .nextLine().trim(); 
char c; 
int ct = 0; 
for (int i = 1; i < s.length(); i++) { 
    c = s.charAt(i); 
    if (c >= 65 && c <= 90 && s.charAt(i - 1) == 32) { 
     ct++; 

    } 
} 
System.out.println("total number of words start with capital letters are :" + ct); 

DEMO

или лучше использовать scanner.next() как сказал ЗАДАЧА

+0

Вы проверяете, есть ли пробелы перед заглавной буквой ... вкладки? br ?, и если заглавная буква является первой в String, программа будет вызывать java.lang.StringIndexOutOfBoundsException –

+0

@DavidHerrero нет, он не будет проверять демонстрацию – silentprogrammer

+1

sorry..didnt видеть 'int i = 1', my ошибка;) –

0

Попробуйте это:

Scanner in = new Scanner(System.in); 
     String s = new String(); 
     System.out.println("Enter a line:"); 
     s = in.nextLine(); 
     char c; 
     int ct = 0; 
     for (int i = 0; i < s.length(); i++) { 
      c = s.charAt(i); 
      if (Character.isUpperCase(c) 
        && (i == 0 || Character.isWhitespace(s.charAt(i - 1)))) { 
       ct++; 

      } 
     } 
     System.out 
       .println("total number of words start with capital letters are :" 
         + ct); 
Смежные вопросы