Типы данных char и String: примеры применения — введение в Java 004 #
Если в программе нужны символы, то для этого мы пользуемся типом данных char. Например:
public class HelloChar public static void main(String[] args) char zahl = 100; // Сотый по счёту символ в таблице char octal = '\u039A'; // Вызов определённого символа кодом char zeichen = 'A'; // Буква A char tabulator = '\t'; // В русском языке клавиша называется "Таб" // Табулятор char phi = '\u03A6'; // Греческая буквая Фита - PHI System.out.println(zahl); System.out.println(octal); System.out.println(zeichen); System.out.print(tabulator); System.out.println(phi); > >
Объект базового (примитивного) типа char является 16-битным символом Unicode.
Мы можем вывести любое сообщение или любой символ. однако достаточно сложно вывести на экран кавычки, ведь в них мы и держим значения наших переменных. Для таких случаев мы используем экранирование. С помощью обратной косой черты(обратный слеш) мы экранируем символ или используем её для дополнительных параметров.
\b Backspace (Курсор двигается на одно место влево) \n Newline (Новая строчка) \f Newpage (Новая страница) \r Carriage return (Курсор становится на первое место в строчке, возврат каретки) \t Горизонтальный табулятор \" Двойная кавычка \' Одинарная кавычка \\ Backslash(вызов обратного слэша) \___ Символы с октальным значением от 000 до 377, например \304 соответствует символу Ä \u___ Вызов символа уникода (Unicode-16). Где например \u00C4 соответствует Ä
Таблица символов Windows (charmap) вызывает и показывает именно те символы, которые можно вызвать в Java.
String #
Мы можем хранить в программе и набор символов: пароль, фамилию, звание, название улицы или просто набор символов. Для хранения таких данных можно использовать String. Пример использования:
public class HelloString public static void main(String[] args) String firstname = "Andrej"; String secondname = "Podlubnyj"; char copyright = '\u00A9'; int old = 18; System.out.println(firstname + " " + secondname + " " + old); String student = firstname + " " + secondname + " " + copyright; System.out.println(student); > >
Один символ можно записать как “маленьким” стрингом, так и через символ при помощи типа данных char. Цепочку символов, больше одного, мы храним в типе данных String. Каждый элемент этой цепочки символов можно отобразить при помощи char. Это очень важно понять и запомнить.
Строковый набор символов класса String может немного больше, чем просто хранить строчку в переменной. Например, мы можем вычислить количество символов или длину String, используя один из методов, которые есть в Java. Это примерно такие же методы, как те, что мы использовали в предыдущих уроках, чтобы возводить числа в степень или выводить результаты на экран:
int dlina; dlina = student.length(); System.out.println(dlina);
Для переменных типа String ява заготовила много дополнительных методов, которые делают нашу жизнь проще. Например, метод substring, который вырезает из одной цепочки символов другую.
public class WhatCanYouDoString public static void main(String[] args) String name = "AndrejPodlubnyj"; int dlina = name.length(); System.out.println(name); System.out.println(dlina); // вырезать символы с 6-го по 15-ый String firstName = name.substring(6,15); dlina = firstName.length(); System.out.println(firstName); System.out.println(dlina); > >
Если мы пишем приложение для веб-сайта с “user generated content”, то мы можем столкнуться с тем, что часть контента пишется заглавными буквами. В Java есть методы, которые приводят цепочку символов алфавита к прописным (заглавным) или к строчным (маленьким) буквам. Давайте рассмотрим пример:
public class UppercaseAndLowercase public static void main(String[] args) String articleTitle = "london is the capital"; articleTitle = articleTitle.substring(0,1).toUpperCase() + articleTitle.substring(1); System.out.println(articleTitle); articleTitle = articleTitle.toUpperCase(); System.out.println(articleTitle); System.out.println(articleTitle.toLowerCase()); > >
С помощью метода toUpperCase() мы делаем буквы прописными, с помощью метода toLowerCase() мы приводим значение строки к строчным буквам.
Мы обязательно вернёмся к этому и другим возможностям класса. Пока надо только запомнить, что, если мы хотим создать записную книжку, то фамилию и имя абонента мы скорее всего будем хранить с помощью типа данных String.
Явные и неявные преобразования #
Значения, передаваемые переменным, можно привести в тот тип данных, которые переменная может принять. Вручную или автоматически, или явно и неявно.

Расширение типа (widening Casting), которое можно проследить на схеме с помощью стрелок, происходит автоматически. Это преобразование меньшего типа данных в типа большего размера: byte -> short -> char -> int -> long -> float -> double.
Сужение типа (narrowing Casting) — преобразование типа данных большего размера в тип данных меньшего размера — делается вручную: double -> float -> long -> int -> char -> short -> byte
public class MyClass public static void main(String[] args) int myInt = 9; double myDouble = myInt; // Automatic casting: int to double System.out.println(myInt); // Outputs 9 System.out.println(myDouble); // Outputs 9.0 > >
public class MyClass public static void main(String[] args) double myDouble = 9.78; int myInt = (int) myDouble; // Manual casting: double to int System.out.println(myDouble); // Outputs 9.78 System.out.println(myInt); // Outputs 9 > >
Повышение типа на примере
public class Main public static void main(String[] args) byte b = 42; char c = 'a'; short s = 1024; int i = 50_000; float f = 5.67f; double d = .1234; double result = (f * b) + (i / c) - (d * s); System.out.println((f * b) + " + " + (i / c) + " - " + (d * s)); System.out.println("result = " + result); > >
Допустим, у нас имеется старая база данных, где все данные записаны в строковом виде. Например просто текстовый файл столбиком. Java даёт нам возможность “спарсить” целочисленные данные из строк.
String number = "10"; int result = Integer.parseInt(number); System.out.println(result);
Дополнительные материалы #
- По ссылке можно посмотреть все методы, которые поддерживает тип данных String.
Домашнее задание #
- Найти в интернете таблицы для типа данных char. Проверить, что они действительно соответствуют тому, что выводит Java на экран. Найти “смешные” символы, символ стандартного смайлика, найти символ телефона, параграфа, копирайта(C), торговой марки(тм), рубля, евро, доллара, знаков зодиака, шахмат, червы.
- Вбить в поисковую строку Windows “charmap”.
- Найдите самостоятельно статьи на тему:
- Что такое юникод?
- Что такое ASCII?
- Что такое UTF?
- Что будет, если “сложить” переменную String с самой собой? Можно ли умножить её на саму себя? Почему?
- Вывести на экран сообщение в кавычках. Например собственное имя + “профессия”.
- Вывести на экран построчно анкетные данные: Имя, Фамилия, Адрес, Улица и тд и тп. Пример вывода одной строчки:
Как ввести символ java
Для ввода символа с клавиатуры в Java можно использовать класс Scanner из пакета java.util. Вот пример кода:
import java.util.Scanner; public class Main public static void main(String[] args) Scanner scanner = new Scanner(System.in); System.out.print("Введите символ: "); char c = scanner.next().charAt(0); System.out.println("Вы ввели символ: " + c); > >
В этом примере мы
- создаем новый объект Scanner и передаем ему входной поток System.in , чтобы он мог считывать введенные пользователем данные с клавиатуры;
- выводим приглашение для ввода символа;
- считываем символ с помощью метода next() ;
- вызываем метод charAt(0) , чтобы получить первый символ введенной строки;
- выводим введенный символ на экран.
Ввод с клавиатуры
В предыдущих лекциях мы познакомились с командами вывода на экран. Для этого мы использовали объект System.out , и его методы print() и println() . Просто и удобно.
Но, как вы уже наверное догадываетесь, одного вывода на экран недостаточно. Цель большинства программ — сделать что-то полезное для пользователя. Поэтому очень часто нужно, чтобы пользователь мог вводить данные с клавиатуры.
Как и для вывода, для ввода данных тоже есть специальный объект — System.in . Но, к сожалению для нас, он не настолько удобен, как нам бы хотелось. Этот объект позволяет считывать данные с клавиатуры по одному символу за раз.
Поэтому мы воспользуемся еще одним классом, который в паре с объектом System.in даст нам все, что нужно. В Java уже давно есть классы на все случаи жизни. С одним из них мы сейчас и познакомимся.
2. Класс Scanner
Класс Scanner (полное имя java.util.Scanner ) умеет считывать данные из разных источников: консоль, файлы, интернет. Если мы хотим, чтобы он считывал данные с клавиатуры, мы должны передать ему объект System.in в качестве параметра – источника данных. А уж объект типа Scanner сам разберется, что с ним делать.
Считывание с клавиатуры с помощью объекта типа Scanner будет выглядеть примерно так:
Scanner console = new Scanner(System.in); String name = console.nextLine(); int age = console.nextInt();
Выглядит вроде несложно, но так ли все просто на самом деле?
Думаю, у вас появилась куча вопросов, и сейчас мы на них ответим.
Но для начала продемонстрируем пример полной программы, где используется класс Scanner :
import java.util.Scanner; public class Solution < public static void main(String[] args) < Scanner console = new Scanner(System.in); String name = console.nextLine(); int age = console.nextInt(); System.out.println("Name: " + name); System.out.println("Age: " + age); > >
3. Создание объекта Scanner
Первый вопрос – что это за строка Scanner console = new Scanner(System.in); ?
Такая строка может сбивать с толку, однако вы будете постоянно встречать похожие вещи. Так что, думаем, настало время объяснить, что тут написано.
Вспомним, как мы обычно создаем переменную с текстом:
String str = "текст";
Объявление и инициализация строковой переменной
Сначала мы пишем тип переменной ( String ), затем ее имя ( str ) и, наконец, после знака равно пишем значение.
В нашей странной строке на самом деле все то же самое:
Scanner console = new Scanner(System.in);
Объявление и инициализация переменной типа Scanner
Все, что находится слева от знака равно — это объявление переменной типа Scanner по имени console . Можно было назвать ее, например, s или scanner , или даже keyboard . Тогда код выглядел бы так:
Scanner s = new Scanner(System.in); String name = s.nextLine(); int age = s.nextInt();
Scanner scanner = new Scanner(System.in); String name = scanner.nextLine(); int age = scanner.nextInt();
Scanner keyboard = new Scanner(System.in); String name = keyboard.nextLine(); int age = keyboard.nextInt();
Думаю, теперь все стало гораздо понятнее.
А код, что находится справа от знака равно , немного сложнее. Имеется в виду new Scanner(System.in); Но тут тоже ничего космического.
В этом коде мы говорим Java-машине: создай новый объект (слово new ) типа Scanner и передай в него в качестве параметра то, из чего новосозданный объект Scanner будет брать данные — объект System.in .
После выполнения всей этой строки у нас появится переменная по имени console типа Scanner , с помощью которой наша программа сможет считывать данные с клавиатуры.
4. Вызов методов
В приведенном выше примере наша переменная console типа Scanner хранила у себя внутри ссылку на объект типа Scanner .
Чтобы вызвать методы объекта, на который ссылается переменная, нужно после имени переменной написать точку, а затем имя метода и параметры. Общий вид этой команды такой:
переменная.метод(параметры);
Вызов метода объекта, на который ссылается переменная
System.out.println("Привет");
System.out.println(1);
Если вы не планируете передавать в функцию параметры, нужно писать просто пустые скобки:
переменная.метод();
Вызов метода без передачи параметров
System.out.println();
5. Ввод данных с консоли
Вводить данные с клавиатуры, когда у нас есть объект типа Scanner , очень легко.
Чтобы считать с клавиатуры строку , нужна команда:
String str = console.nextLine();
Когда программа дойдет до выполнения этой строки, она приостановится и будет ждать, пока пользователь введет данные и нажмет клавишу enter. После этого все, что ввел пользователь, будет сохранено в переменную str .
Чтобы считать с клавиатуры число , нужна команда:
int number = console.nextInt();
Тут все аналогично предыдущей команде. Когда программа дойдет до выполнения этой строки, она приостановится и будет ждать, пока пользователь введет данные и нажмет клавишу enter. После этого все, что ввел пользователь, будет преобразовано в число и сохранено в переменную number .
Если пользователь ввел данные, которые невозможно преобразовать в целое число, в программе возникнет ошибка, и она завершится.
Чтобы считать с клавиатуры дробное число , нужна команда:
double number = console.nextDouble();
Эта команда полностью аналогична команде nextInt() , только она проверяет, что введенные данные можно преобразовать в число double .
Пример программы, которая считывает с клавиатуры два числа и выводит их сумму:
import java.util.Scanner; public class Solution < public static void main(String[] args) < Scanner console = new Scanner(System.in); int a = console.nextInt(); int b = console.nextInt(); System.out.println(a + b); > >
Примечание
Пользователь может ввести несколько чисел в одной строке, разделив их пробелами: такая ситуация будет корректно обработана методами класса Scanner . Однако числа будут считаны программой только после того, как пользователь нажмет Enter .
Ввод данных в консоли Java

Этот материал будет полезен, прежде всего, начинающим Java-разработчикам. Мы поговорим о вводе данных на консоль и о том, зачем нужен класс Scanner.
Как правило, вывод данных на консоль в Java не представляет сложности. Обычно для этого используют System.out.print либо System.out.println. Но если дело доходит до ввода, то тут иногда возникают трудности. Они связаны с тем, что реализация консольного ввода в Java считается некоторыми специалистами достаточно сложной и неудобной. Однако освоить её и изучить работу сканера (Scanner) не составит труда.
Как вы уже поняли, работа эта строится с помощью класса Scanner. Кроме сканера, для ввода в Java можно использовать и класс InputStream (System.in) — о нём поговорим в первую очередь.
Ввод с помощью InputStream (System.in)
Java получает данные из консоли посредством системного потока ввода (Isystem.in), а значит, такой способ ввода кажется очевидным. Но у него есть недостаток. Связан он с тем, что системный поток получает лишь числовые коды символов, введённые в окно консоли. При этом за раз из этого потока можно прочитать только код одного символа. В результате для чтения строки или слова потребуется применение цикла.
Посмотрите пример считывания строки, введённой в консоли Java:
int inChar; String s = «»; try < inChar = System.in.read(); while (System.in.available() >0) < s += (char) inChar; inChar = System.in.read(); >> catch (IOException e)
Пока поток ввода содержит данные, а метод available осуществляет возвращение значений больше ноля, мы выполняем считывание кода символа раз за разом. Потом преобразуем его в сам символ с дальнейшим добавлением символа в конец строки.
Но неудобства в Java на этом не заканчиваются, ведь мы постоянно получаем данные в строковом формате. А если потребуется ввести целое число, нам придётся дополнить наш код приведением типов и соответствующей проверкой.
Собственно говоря, именно поэтому ввод данных в консольных приложениях напрямую сейчас редко используется, так как использование сканера (работа с классом Scanner) считается более удобной.
Ввод с помощью Scanner
Класс Scanner исключает трудности, связанные с применением системного потока ввода, плюс максимально упрощает ввод данных от пользователя в консоль Java. Мало того, чтение данных из консоли через сканер — это не единственная возможность Scanner, но это уже отдельная история.
Итак, экземпляр класса Scanner в Java создаётся посредством конструктора, принимающего поток ввода в качестве единственного параметра. Далее можно сразу же считывать готовые данные, используя семейство методов с префиксом next.
Продемонстрируем считывание строки, введённой в консоли Java. С помощью Scanner в конструктор осуществляется передача системного потока ввода.
Scanner in = new Scanner(System.in); System.out.print("Введите строку: "); String str = in.nextLine();Сравнивая последний пример с вышеприведённым (с прямым считыванием String), мы уверенно скажем, что преимущество Scanner очевидно. Смотрите, благодаря Scanner нам не нужно вручную считывать коды символов, формируя строку в цикле. Scanner сам выполняет рутинные низкоуровневые функции, а потом предоставляет данные, готовые к использованию в программе.
Как мы уже говорили, класс Scanner в Java включает в себя целый ряд методов, используемых для считывания данных. Они отличаются названиями и типами возвращаемых значений: — nextLine, — nextBoolean, — nextInt, — nextDouble, — nextByte и прочие.
Также в классе Scanner выделяют методы с префиксом hasNext, позволяющие определять тип считываемых данных (hasNextLine, hasNextInt, hasNextBollean и т. п.). А если в потоке ввода есть данные соответствующего типа, данные методы возвратят true.
Scanner in = new Scanner(System.in); System.out.print("Введите строку: "); if (in.hasNextLine())
Таким образом в Java обеспечивается безопасность получения данных по отношению к несоответствию типов.
Что ж, ввести данные в консоль Java не так уж и сложно, особенно, если вы используете Scanner. На этом пока всё, следите за новостями!
