Символы
Иногда нам нужно хранить не целую строку, а один знак: цифру '7', знак '+', первую букву имени.
Для этого в Java есть тип char — отдельный символ.
Основное
Символьная переменная объявляется так:
Примеры:
Важные моменты:
- символ пишется в одинарных кавычках:
'A'; - строка (
String) — в двойных:"A","Hello"; - тип
charхранит ровно один символ.
char и String: в чём разница
char — один символ.
String — последовательность символов (слово, фраза, текст).
Из строки можно взять символ по индексу:
Чтение символа с клавиатуры
В Scanner нет метода nextChar(), поэтому обычно читают строку и берут первый символ.
import java.util.Scanner;
public class ReadCharExample {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s = in.next(); // читаем слово
char c = s.charAt(0); // берём первый символ
System.out.println("Символ: " + c);
}
}
Если нужно прочитать символ из целой строки:
Сравнение символов
Символы можно сравнивать так же, как числа: ==, !=, <, > и т.п.
Можно проверять, что символ — цифра или буква, с помощью класса Character:
char c = in.next().charAt(0);
boolean isDigit = Character.isDigit(c);
boolean isLetter = Character.isLetter(c);
boolean isSpace = Character.isWhitespace(c);
Код символа и простые шифры
Внутри компьютер хранит символ как число (код).
Можно преобразовать char в int:
Буквы латинского алфавита идут подряд по кодам.
Это позволяет делать простые сдвиги по алфавиту (идея шифра Цезаря):
Важно: такие приёмы работают корректно для простых латинских букв без «дырок» в таблице. Для реальных систем шифрования используются другие методы, но для учебных задач этой идеи достаточно.
Типичные шаблоны
Определение типа символа
char c = in.next().charAt(0);
if (Character.isDigit(c)) {
System.out.println("Цифра");
} else if (Character.isLetter(c)) {
System.out.println("Буква");
} else {
System.out.println("Другой символ");
}
Проверка, что символ — пробел
char c = in.next().charAt(0);
if (Character.isWhitespace(c)) {
System.out.println("Пробельный символ");
}
Что нужно запомнить
Тип char хранит один символ и записывается в одинарных кавычках:
Чтобы прочитать символ через Scanner, обычно читают строку и берут charAt(0).
Символы можно сравнивать (==, !=) и при необходимости получать их числовой код, приводя к int.
В C++ один символ хранится в типе char.
Основное
Один символ пишется в одинарных кавычках: 'A'.
char и строка (std::string)
Чтение символа
Если нужно прочитать пробел или перевод строки, удобно использовать std::cin.get(c).
Сравнение символов
Для проверок «цифра/буква/пробел» можно использовать функции из <cctype>:
#include <cctype>
bool d = std::isdigit(static_cast<unsigned char>(c));
bool a = std::isalpha(static_cast<unsigned char>(c));
bool w = std::isspace(static_cast<unsigned char>(c));
Код символа
В Python отдельного типа char нет. Один символ — это строка длины 1.
Основное
Один символ обычно пишут в одинарных кавычках: 'A' (можно и в двойных — это тоже строка).
Получить символ из строки
Чтение символа
Проверки символа
Код символа и обратно
Java
char хранит один элемент UTF-16 (16 бит). Обычно это один видимый символ, но некоторые символы (например, часть эмодзи) могут занимать два элемента.
C++
char — это 1 байт. Какой именно символ хранится в этом байте, зависит от кодировки. Для обычных латинских букв и цифр чаще всего всё ведёт себя ожидаемо.
Python
Отдельного типа char нет: один символ — это строка (str) длины 1.
Сравнение
В Java и C++ сравнивают char, в Python — строки длины 1. Сравнение идёт по коду символа.
Код символа
Java: int code = c;
C++: int code = (unsigned char)c;
Python: ord(c)
Прочитать один символ
Java: in.next().charAt(0) (читается слово, пробелы пропускаются)
C++: std::cin >> c (пробелы пропускаются), для пробела — std::cin.get(c)
Python: s = input(); c = s[0]