2016-02-24 4 views
4

Я написал программу, которая принимает в качестве пользовательского ввода String и отображает количество букв, цифр и white-spaces. Я написал код, используя класс Tokenizer, и он подсчитывает буквы и цифры, но он не принимает white-spaces. Есть идеи?Подсчет белых пространств в строке в java

import java.util.Scanner; 

public class line { 

    public static void main(String[] args) { 

    System.out.println("Enter anything you want."); 
    String text; 
    int let = 0; 
    int dig = 0; 
    int space= 0; 

    Scanner sc = new Scanner(System.in); 
    text = sc.next(); 
    char[]arr=text.toCharArray(); 

    for(int i=0;i<text.length();i++) { 
     if (Character.isDigit(arr[i])) { 
      dig++; 
     } else if (Character.isLetter(arr[i])) { 
      let++; 
     } else if (Character.isWhitespace(arr[i])) { 
      space++; 
     } 
    } 
    System.out.println("Number of Letters : "+let); 
    System.out.println("Number of Digits : "+dig); 
    System.out.println("Number of Whitespaces : "+space); 
    }   
} 
+4

Прочитайте Javadoc сканера и следующего(). Что такое токен? –

ответ

0

Вместо text = sc.next(); использование text = sc.nextLine();

+0

Я думаю, что это может отменить разрывы строк. Но, возможно, OP не хочет, чтобы в общей сложности. – Bathsheba

2

Scanner по умолчанию разбивает вход на лексемы, используя пробельные в качестве разделителя!

Проще говоря, он поглощает все пробелы!

Вы можете изменить разделитель на что-то еще, используя sc.useDelimiter(/*ToDo - suitable character here - a semicolon perhaps*/).

1

У вас есть проблема в

sc.next(); 

кроме этого, используют

sc.nextLine(); 

он должен работать.

+0

спасибо! оно работает! пожалуйста, объясните разницу между next() и nextLine(). Я думал, что они оба манипулируют струнами. –

+1

Использование next() возвращает то, что приходит перед пробелом, тогда как nextLine() возвращает остальную часть текущей строки, за исключением разделителя строк в конце. – jab

+2

yes, но next() дает вам следующий токен в вашей строке, по умолчанию это будет пробел, поэтому он вернет вам слово до пробела. nextLine() возвращает всю строку, которую вы записали. – Thodgnir

0

Попробуйте использовать

import java.io.BufferedReader; 
import java.io.InputStreamReader; 

public class Line { 
public static void main(String[] args) throws Exception { 
    String s; 
    System.out.println("Enter anything you want."); 
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
    s = br.readLine(); 
    int length = s.length(); 
    int letters = 0; 
    int numbers = 0; 
    int spaces = 0; 
    for (int i = 0; i < length; i++) { 
    char ch; 
    ch = s.charAt(i); 
    if (Character.isLetter(ch)) { 
    letters++; 
    } else { 
    if (Character.isDigit(ch)) { 
    numbers++; 
    } else { 
    if (Character.isWhitespace(ch)) { 
     spaces++; 
    } else 
     continue; 
    } 
    } 
    } 
    System.out.println("Number of letters::" + letters); 
    System.out.println("Number of digits::" + numbers); 
    System.out.println("Number of white spaces:::" + spaces); 
} 
} 
Смежные вопросы