Что не так с моим Java-кодом? Он должен считать пробелы, но возвращает 0

#java #methods #for-loop

#java #методы #for-цикл

Вопрос:

Код скопирован ниже. Он должен возвращать количество пробелов, если символьная переменная l равна пробелу, но всегда возвращает 0.

Я протестировал его с буквами, и это сработало, например, если я прошу его увеличить, когда переменная l равна e, и введите предложение с e в, оно будет считать. Но по какой-то причине не пробелы.

 import java.util.Scanner;

public class countspace {

    public static void main(String[] args) {            
        Scanner input = new Scanner(System.in);         
        System.out.println("Enter a sentence:");            
        String str = input.next();          
        System.out.println(wc(str));

    }

    public static int wc(String sentence) {

        int c = 0;          
        for (int i = 0; i < sentence.length(); i  ) {           
            char l = sentence.charAt(i);                
            if (l == ' ') {                 
                c  ;                    
            }               
        }           
        return c;           
    }       
}
  

Комментарии:

1. просто в качестве отступа вы можете использовать предложение. toCharArray() для преобразования строки в символ[] вместо получения отдельных символов, как вы это сделали.

Ответ №1:

Scanner.next() (с разделителем по умолчанию) разбирается только до первого пробела — так str что это только первое слово предложения.

Из документации для Scanner :

Сканер разбивает свой ввод на токены, используя шаблон разделителя, который по умолчанию соответствует пробелам.

Ответ №2:

Используйте nextLine вместо этого. Вы также можете распечатать строку для отладки:

 System.out.println(str);
  

Комментарии:

1. Ах, благодаря этому и другому комментарию от Джона Скита, я понял это сейчас, и это работает. Спасибо.

Ответ №3:

Используйте String str = input.nextLine() ; вместо String str = input.next(); Это то, что вы должны сделать, чтобы получить следующую строку. Вы могли бы проверить, что str имеет неправильное значение.