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

Содержание

Слайд 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(ch+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

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

Классы String и StringBuffer

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

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

StringBuffer s = new StringBuffer(“abc”);

Для получения количества символов в строке используйте метод length().