Программирование на языке Java. Кодирование символов

Содержание

Слайд 2

Кодирование символов Текстовый файл на экране (символы) в памяти – двоичные

Кодирование символов

Текстовый файл

на экране (символы)
в памяти – двоичные коды

А где же

хранятся изображения?
Слайд 3

Кодирование символов Сколько символов надо использовать одновременно? или 65536 (UNICODE) Сколько

Кодирование символов

Сколько символов надо использовать одновременно? или 65536 (UNICODE)
Сколько места надо

выделить на символ:
Выбрать 256 любых символов (или 65536) - алфавит.
Каждому символу – уникальный код 0..255 (или 0..65535). Таблица символов:
Коды – в двоичную систему.

256

коды

Слайд 4

Кодировка 1 байт на символ таблица ASCII (международная) расширение (национальный алфавит)

Кодировка 1 байт на символ

таблица ASCII
(международная)

расширение
(национальный алфавит)

ASCII = American Standard

Code for Information Interchange
0-31 управляющие символы: 7 – звонок, 10 – новая строка, 13 – возврат каретки, 27 – Esc.
32 пробел
знаки препинания: . , : ; ! ?
специальные знаки: + - * / () {} []
48-57 цифры 0..9
65-90 заглавные латинские буквы A-Z
97-122 строчные латинские буквы a-z
Кодовая страница (расширенная таблица ASCII) для русского языка:
CP-866 для системы MS DOS
CP-1251 для системы Windows (Интернет)
КОИ8-Р для системы UNIX (Интернет)
Слайд 5

Кодировка UNICODE (UTF-16) Java 16 бит на символ 65536 или 216

Кодировка UNICODE (UTF-16)

Java
16 бит на символ
65536 или 216 символов в одной

таблице

можно одновременно использовать символы разных языков (Интернет)

размер файла увеличивается в 2 раза

Слайд 6

Программирование на языке Java Тема 31. Символьный тип данных

Программирование на языке Java

Тема 31. Символьный тип данных

Слайд 7

Символьный тип данных char Символ – минимальная единица текстовой информации. Примеры

Символьный тип данных char

Символ – минимальная единица текстовой информации.
Примеры символов: @,

u, 8, ф, ®, µ

Символьный тип данных char относится к целочисленному типу без знака, т.к. в памяти хранится не сам символ, а его код в кодировке Unicode.

Слайд 8

Символьный тип данных char Особенности char является единственным беззнаковым примитивным типом

Символьный тип данных char

Особенности char
является единственным беззнаковым примитивным типом данных;
имеет

длину 2 байта (65536 символов);
задается с помощью конструкции \u и 4 шестнадцатеричных цифр от ‘\u0000’ до ‘\uFFFF’;
также можно задать с помощью символа, заключенного в одинарные кавычки, например ‘A’;
инициализировать char можно и как символьный, и как численный литерал;
может участвовать в арифметических действиях.
Слайд 9

Пример char letter1 = '\u0041'; char letter2 = ‘A'; letter1 ==

Пример

char letter1 = '\u0041';
char letter2 = ‘A';
letter1 == letter2 // true

Значения

переменных совпадают
Слайд 10

Пример public static void main(String args[]) { char a = '\u00B5';

Пример

public static void main(String args[]) {
char a = '\u00B5';
char b

= '\u00A4';
System.out.printf("%c%c\n", a, b);
}

%c – спецификатор формата символьного типа char

µ¥

Слайд 11

Инкремент/декремент и char char letter = ‘a'; System.out.println(++letter); Операторы инкремента и

Инкремент/декремент и char

char letter = ‘a';
System.out.println(++letter);

Операторы инкремента и декремента можно применять

к переменным типа char для получения следующего или предыдущего символы в кодировке Unicode.

Выведет символ b

Слайд 12

Примеры char c1 = 10, char c2; c2 = 'A'; //

Примеры

char c1 = 10, char c2;
c2 = 'A'; // латинская буква

A
// (‘\u0041’, код 65)
int i = c1 + c2 - 'B';

65

66

9

char c = 'A';
print(c);
print(c + 1);
print("c=“ + c);
print('c‘ + '=‘ + с);

A

66

c=A

225

Код ‘c’ (99) + код ‘=’(61) + код ‘A’ (65)=225

Слайд 13

Пример public static void main(String args[]) { char ch1 = 'Y';

Пример

public static void main(String args[]) {
char ch1 = 'Y'; System.out.print((int)ch1);
}

Задача.

Вывести на экран код символа ‘Y’.
Слайд 14

Пример public static void main(String args[]) { char ch = 'd';

Пример

public static void main(String args[]) {
char ch = 'd';
ch -= 3;
System.out.println(ch);
}


Что будет выведено на экране?

a

Слайд 15

Специальные символы

Специальные символы

Слайд 16

Чем плох массив символов? char A[] = {'A', 'B', 'C', 'D'};

Чем плох массив символов?

char A[] = {'A', 'B', 'C', 'D'};

Это массив

символов:

Для массива:
каждый символ – отдельный объект;
массив имеет длину N, которая задана при объявлении, ее нельзя изменить.

Что нужно:
обрабатывать последовательность символов как единое целое;
строка должна иметь переменную длину

Слайд 17

Программирование на языке Java Тема 32. Строки

Программирование на языке Java

Тема 32. Строки

Слайд 18

Объекты и классы Объекты – это сущности, которые содержат данные (переменные)

Объекты и классы

Объекты – это сущности, которые содержат данные (переменные) и

поведение (методы).
Класс – тип объекта.
Примеры:
класс String представляет объекты, в которых хранится текст;
класс Scanner представляет объекты, предназначенные для чтения данных из консоли, файла и других источников.
Слайд 19

Объект String String – объекты, в которых хранится строка, состоящая из

Объект String

String – объекты, в которых хранится строка, состоящая из символов.
В

отличие от большинства других объектов строку можно создать без оператора new.
Для обозначения строк используются двойные кавычки

String s = new String(“Привет!”);

String s = “Привет!”;

Слайд 20

Символьные строки рабочая часть s.charAt(0) s.charAt(1) Длина строки: int n = s.length(); длина строки s.charAt(2)

Символьные строки

рабочая часть

s.charAt(0)

s.charAt(1)

Длина строки:

int n = s.length();

длина строки

s.charAt(2)

Слайд 21

Ввод строки с клавиатуры. Кодировка Для ввода кириллических символов с клавиатуры

Ввод строки с клавиатуры. Кодировка

Для ввода кириллических символов с клавиатуры потребуется

указать кодировку ввода.
Вместо
Укажем

Scanner in = new Scanner (System.in, "cp1251");

Scanner in = new Scanner (System.in);

Кодировка windows-1251

Слайд 22

Ввод строки с клавиатуры. Методы Для ввода строки используются методы: next()

Ввод строки с клавиатуры. Методы

Для ввода строки используются методы:
next() –

возвращает последовательность символов до специального символа-разделителя (пробел, табуляция, перевод строки и т.п);
nextLine() – возвращает следующую строку ввода до символа перевод строки (\n).
Слайд 23

Ввод строки с клавиатуры. Пример Scanner in = new Scanner (System.in,

Ввод строки с клавиатуры. Пример

Scanner in = new Scanner (System.in, "cp1251");
System.out.println(“Введите

строку 1: ”);
String str1 = in.nextLine();
System.out.printf(“%s\n”, str1);
System.out.println(“Введите строку 2: ”);
String str2 = in.next();
System.out.printf(“%s\n”, str2);

Введите строку 1:
фыва олдж
фыва олдж
Введите строку 2:
фыва олдж
фыва

Слайд 24

Ввод символа с клавиатуры System.out.print("Введите символ: "); char ch = in.next().charAt(0); System.out.printf("%c\n", ch);

Ввод символа с клавиатуры

System.out.print("Введите символ: ");
char ch = in.next().charAt(0);
System.out.printf("%c\n", ch);

Слайд 25

Символьные строки Задача: ввести строку с клавиатуры и подсчитать сколько букв

Символьные строки

Задача: ввести строку с клавиатуры и подсчитать сколько букв «л»

в нее входит.

System.out.print("Введите строку");
String s = in.nextLine();
int count = 0;
for (int i = 0; i < s.length(); i++)
if (s.charAt(i) == 'л')
count++;
System.out.println(count);

ввод строки

длина строки

Слайд 26

Задания Задача: Ввести символьную строку и проверить совпадает ли первый символ

Задания

Задача: Ввести символьную строку и проверить совпадает ли первый символ строки

и последним.
Пример: Пример:
Введите строку: Введите строку:
АБВГДЕ КАЗАК
Результат: Результат:
Не совпадают. Совпадают.
Слайд 27

Задания Задача: Ввести символьную строку и проверить, является ли она палиндромом

Задания

Задача: Ввести символьную строку и проверить, является ли она палиндромом (палиндром

читается одинаково в обоих направлениях).
Пример: Пример:
Введите строку: Введите строку:
АБВГДЕ КАЗАК
Результат: Результат:
Не палиндром. Палиндром.
Слайд 28

Конкатенация строк Для объединения двух строк используется метод concat() или оператор

Конкатенация строк

Для объединения двух строк используется метод concat() или оператор +.

String

s1 = “abc”;
String s2 = “123”;
String s3 = s1.concat(s2);
String s4 = s2.concat(s1);

abc123

123abc

То же самое с использованием оператора +.

String s1 = “abc”;
String s2 = “123”;
String s3 = s1 + s2;
String s4 = s2 + s1;

Слайд 29

Эквивалентность объектов Оператор == сравнивает объекты по ссылке, поэтому часто такое

Эквивалентность объектов

Оператор == сравнивает объекты по ссылке, поэтому часто такое сравнение

возвращает значение false, даже если, например, строки состоят из одних и тех же символов.
Объекты нужно сравнивать с помощью метода equals.
Технически это метод, который возвращает значение типа boolean (логический метод), и для каждого типа объектов выполняет свои проверки.
Слайд 30

Логические методы для строк equals(String s) – полное сравнение строк equalsIgnoreCase(String

Логические методы для строк

equals(String s) – полное сравнение строк
equalsIgnoreCase(String s) –

сравнение, игнорирующее регистр символов
startsWith(String s) – проверка, что строка начинается с символов другой строки
endsWith(String s) – проверка, что строка заканчивается символами другой строки
contains(String s) – проверка, что строка содержит другую подстроку
Слайд 31

Эквивалентность строк – 1 Задача: дано две строки, нужно проверить совпадают

Эквивалентность строк – 1

Задача: дано две строки, нужно проверить совпадают ли

они.

String s1 = “abc”;
String s2 = new String(“abc”);
if (s1 == s2)
print(“Строки совпадают”);

Условие никогда не выполнится

Слайд 32

Эквивалентность строк – 2 Задача: дано две строки, нужно проверить совпадают

Эквивалентность строк – 2

Задача: дано две строки, нужно проверить совпадают ли

они.

String s1 = “abc”;
String s2 = new String(“abc”);
String s3 = “AbC”;
println (s1.equals(s2));
println (s1.equals(s3));
println (s1.equalsIgnoreCase(s3));

true

false

true

Слайд 33

Сравнение строк – 1 Одна строка меньше другой строки, если она

Сравнение строк – 1

Одна строка меньше другой строки, если она расположена

перед ней в лексикографическом порядке.
“2 be or to B”
“2 B be or to”
Для сравнения строк используется метод
compareTo() – возвращает числовое значение, которое трактуется по следующим правилам:
<0 – вызывающая строка меньше строки из параметра
>0 – вызывающая строка больше строки из параметра
=0 – строки эквивалентны
Слайд 34

Сравнение строк – 2 String s1 = “abc”; String s2 = “AbC”; print (s1.compareTo(s2)); 32

Сравнение строк – 2

String s1 = “abc”;
String s2 = “AbC”;
print (s1.compareTo(s2));


32

Слайд 35

Получение подстроки – 1 Получить подстроку некоторой строки можно с помощью

Получение подстроки – 1

Получить подстроку некоторой строки можно с помощью метода

substring(). Две формы вызова:
substring(int beginIndex) – возвращает подстроку, начинающуюся с индекса beginIndex и до конца строки.
substring(int beginIndex, int endIndex) – возвращает подстроку, начинающуюся с индекса beginIndex и заканчивающуюся в endIndex.
Слайд 36

Получение подстроки – 2 String s = “Welcome to Java”; print

Получение подстроки – 2

String s = “Welcome to Java”;
print (s.substring(0, 10));


print (s.substring(11));

s.substring(0, 10)

s.substring(11)

Слайд 37

Преобразование строк toLowerCase() – возвращает новую строку, в которой все символы

Преобразование строк

toLowerCase() – возвращает новую строку, в которой все символы преобразованы

к нижнему регистру;
toUpperCase() – возвращает новую строку, в которой все символы преобразованы к верхнему регистру;
trim() – возвращает новую строку, в которой удалены все начальные и конечные пробельные символы.

String s = “\t Welcome \n”;
print (s.toLowerCase());
print (s.toUpperCase());
print (s.trim());

“\t welcome \n”

“\t WELCOME \n”

“Welcome”

Слайд 38

Преобразование строк String s = “Welcome"; s.toUpperCase(); System.out.println(s); “Welcome” Методы преобразований

Преобразование строк

String s = “Welcome";
s.toUpperCase();
System.out.println(s);

“Welcome”

Методы преобразований создают и возвращают новую строку,

а не изменяют текущую

String s = “Welcome";
s = s.toUpperCase();
System.out.println(s);

“WELCOME”

Чтобы изменить переменную, нужно использовать оператор присваивания

Слайд 39

Замена строк replace(char old, char new) – возвращает новую строку, в

Замена строк

replace(char old, char new) – возвращает новую строку, в которой

все символы old заменены на символ new;
replaceAll(String old, String new) – возвращает новую строку, в которой все подстроки old заменены на подстроку new.

String s = “Welcome”;
print (s.replace(‘e’, ‘A’));
print (s.replaceAll(“el”, “AB”));

“WAlcomA”

“WABcome”

Слайд 40

Разбиение на подстроки split(String delimiter) – возвращает массив строк, содержащих подстроки

Разбиение на подстроки

split(String delimiter) – возвращает массив строк, содержащих подстроки «разбитые»

по разделителю delimiter.

String s = "Java#HTML#CSS";
String[] tokens = s.split("#");
for (int i = 0; i < tokens.length; i++)
println(tokens[i]);

Java
HTML
CSS

Слайд 41

Поиск подстрок – 1 Методы, которые позволяют выполнить поиск в строке

Поиск подстрок – 1

Методы, которые позволяют выполнить поиск в строке определенного

символа или подстроки:
indexOf() – ищет первое вхождение символа или подстроки
lastIndexOf() – ищет последнее вхождение символа или подстроки
Оба метода возвращают позицию в строке, где символ или подстрока были найдены, либо значение -1 в случае неудачи.
Слайд 42

Поиск подстрок – 2 String s = “Абракадабра”; print (s.indexOf(‘a’)); print

Поиск подстрок – 2

String s = “Абракадабра”;
print (s.indexOf(‘a’));
print (s.lastIndexOf(‘a’));
print

(s.indexOf(“ра”));
print (s.lastIndexOf(“ра”));
print (s.indexOf(“тра”));
Слайд 43

Строки как параметры методов public static void main(String[] args) { sayHello(“Alice");

Строки как параметры методов

public static void main(String[] args) {
sayHello(“Alice");
String

person = “Bob";
sayHello(person);
}
public static void sayHello(String name) {
System.out.println(“Hello, " + name);
}
Слайд 44

char vs. String String s = "h"; s = s.toUpperCase(); //

char vs. String

String s = "h";
s = s.toUpperCase(); // 'H'
char first

= s.charAt(0); // 'H'

‘a’ – это символ (char), “a” – это строка (String)
String – это объект, он содержит методы:

char – примитивный, от него нельзя вызвать методы

char c = 'h';
c = c.toUpperCase(); // ERROR

print(s + 1);
print(c + 1);
print(s + s);
print(c + c);

Слайд 45

Задача – 1 Задача. В текстовом файле data.txt представлены данные об

Задача – 1

Задача. В текстовом файле data.txt представлены данные об абитуриентах

в следующем формате:
id Фамилия Имя Отчество Балл1 Балл2 Балл3

56 Иванов Иван Иванович 69 40 78
23 Петров Александр Петрович 79 90 88

Вывести данные из файла на консоль в виде таблицы

+---+------------+----+----+----+
| id| ФИО | Б1 | Б2 | Б3 |
+---+------------+----+----+----+
| 56|Иванов И.И. | 69| 40| 78|
+---+------------+----+----+----+

Слайд 46

Задача – 2 Задача. Шифр Цезаря – простой способ шифрования, при

Задача – 2

Задача. Шифр Цезаря – простой способ шифрования, при котором

каждый символ в открытом тексте заменяется символом, находящимся на некотором постоянном числе позиций левее или правее него в алфавите.
Например, при сдвиге 3 получаем
АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ
ГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯАБВ
Напишите метод, который принимает в качестве параметров исходное сообщение и сдвиг, а возвращает сообщение, зашифрованное шифром Цезаря. При этом символы, отличные от кириллических, оставить без изменения.
Слайд 47

Метод format Класс String включает статический метод format для создания форматированных

Метод format

Класс String включает статический метод format для создания форматированных строк

String.format(<форматная_строка>,


парметр1, ..., параметрk)

String s = String.format(
"%7.2f%6d%-4s", 45.556, 14, "AB");
System.out.println(s);

Слайд 48

Неизменяемые строки Класс String представляет неизменяемые (immutable) строки, т.е. их содержимое

Неизменяемые строки

Класс String представляет неизменяемые (immutable) строки, т.е. их содержимое нельзя

изменить.
Изменит ли следующий код содержимое строки?

String s = “Java";
s = “HTML”;

Нет

Слайд 49

Классы String и StringBuffer Класс String представляет неизменяемые последовательности символов постоянной

Классы String и StringBuffer

Класс String представляет неизменяемые последовательности символов постоянной длины.
Если

нужно работать с изменяемыми строками (mutable) , можно воспользоваться классом StringBuffer.

StringBuffer s = new StringBuffer(“abc”);