Страницы

Поиск по вопросам

Показаны сообщения с ярлыком scanner. Показать все сообщения
Показаны сообщения с ярлыком scanner. Показать все сообщения

вторник, 25 февраля 2020 г.

Непонятные символы при вводе русских букв (кириллицы) в Java

#java #scanner #netbeans


import java.util.Scanner;

public static void main(String[] args) {
     Scanner n = new Scanner (System.in);
     String fio;
     System.out.print("Введите Фамилию :");
     fio = n.nextLine();
     System.out.println(fio);
}



  Введите Фамилию: Иванов Денис Иванович
  ������ ����� ��������
  СБОРКА УСПЕШНО ЗАВЕРШЕНА (общее время: 19 секунд)


При вводе русских букв выводит непонятные символы. Как исправить? Подскажите, если
можно, пример, работаю в NetBeans IDE 8.0.1. 
    


Ответы

Ответ 1



Ваша проблема описана тут. Если вы пишете в NetBeans, то вам необходимо зайти в свойства проекта и поменять кодировку на windows-1251. После этого данный код работает корректно: Либо как вариант указать кодировку вводимых символов сразу: public static void main(String[] args) throws UnsupportedEncodingException, IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in,"Cp1251")); System.out.println("Введите ФИО:"); //Scanner in = new Scanner(System.in); String s = br.readLine(); System.out.println(s); }

Ответ 2



Если пишешь в Netbeans - Scanner scanner = new Scanner (System.in, "Cp866"); Без проблем будет читать русские буквы.

четверг, 12 декабря 2019 г.

System.in.read() или всё же Scanner?

#java #scanner


Заметил во многих книгах используется: System.in.read() - это получить что-то с клавиатуры.
Почему там допустим не используется класс Scanner? Потому что System.in.read() это
быстрее, нежели чем создавать экземпляр класса Scanner и далее создавать вот такую
конструкцию:

Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();


или же 

Scanner scanner = new Scanner(System.in);
int x = scanner.nextInt();


Поискал на Stackoverflow и не нашел отличия System.in.read и класса Scanner. 
    


Ответы

Ответ 1



Разница есть, и притом, существенная. System.in.read() может считать только 1 символ в виде char. В то же время, Scanner - это универсальная штука, позволяющая считывать в том формате, что надо. Если требуется считать по символам, то не следует заморачиваться, а использовать System.in.read(). В остальных случаях - это, в частности и файлы, используем Scanner.

Ответ 2



Потому что искусство подачи учебной информации включает умение рассказывать только о том, что относится к теме, без привлечения дополнительных сущностей. Если тема относится к основам считывания данных из потока ввода, то объяснять это через использование токенизатора - это усложнение и отвлечение.

суббота, 7 декабря 2019 г.

Особенности использования scanner.nextLine()

#java #scanner


У меня есть такой код. 

String anun=sc.nextLine();
System.out.println("age:");
int tar=sc.nextInt();
System.out.println("email:");
String mail=sc.nextLine();
System.out.println(mail);
System.out.println("email:" + mail);


И всегда, когда наступает время для String mail=sc.nextLine();, просто пропускается
шаг. В чем заключается проблема?
    


Ответы

Ответ 1



В этой строке вы считали только число (не учитывая всё, что может идти дальше, включая конец строки): sc.nextInt(); Далее при вызове sc.nextLine(); Происходит считывание конца строки (начиная от ранее введенного числа и заканчивая переводом строки). Можете добавить дополнительный вызов sc.nextLine(); после каждого вызова nextInt();.

суббота, 13 октября 2018 г.

Особенности использования scanner.nextLine()

У меня есть такой код.
String anun=sc.nextLine(); System.out.println("age:"); int tar=sc.nextInt(); System.out.println("email:"); String mail=sc.nextLine(); System.out.println(mail); System.out.println("email:" + mail);
И всегда, когда наступает время для String mail=sc.nextLine();, просто пропускается шаг. В чем заключается проблема?


Ответ

В этой строке вы считали только число (не учитывая всё, что может идти дальше, включая конец строки):
sc.nextInt();
Далее при вызове
sc.nextLine();
Происходит считывание конца строки (начиная от ранее введенного числа и заканчивая переводом строки). Можете добавить дополнительный вызов sc.nextLine(); после каждого вызова nextInt();