Строки и работа с символами — Введение в программирование
Сейчас вы уже знаете, что здесь происходит вызов функции, а функция console.log принимает аргумент. В данном случае аргумент — не число, а «строка». Так мы называем фрагменты текста в программировании, потому что они как последовательность букв на веревке.
Строки есть везде. Сейчас я читаю сценарий, и текстовый файл — это длинная строка. Веб-сайт, на котором вы смотрите эти видео, содержит множество слов — всё это строки. Работа Google запоминать строки — в этом суть поиска. Файлы и папки в вашем компьютере идентифицируются через их названия, которые так же являются всего лишь строками.
Так же, как мы это делали с числами, мы можем создать константу из строки:
const str = "Hello";
Вы можете использовать одиночные кавычки или двойные, не так важно, главное чтобы они были одинаковые и в начале и в конце строки.
Если вам необходимо использовать реальные кавычки внутри строки, тогда используйте другой знак для её создания. Например:
const str = 'They call him "Harry", and he likes it'; ///They call him "Harry", and he likes it
Здесь одиночные кавычки используются для формулирования или ограничения строки, и тогда у нас есть возможность поставить двойные внутри. Или наоборот:
const str = "They call him 'Harry', and he likes it"; /// They call him 'Harry', and he likes it
Двойные снаружи — одиночные внутри.
Но что делать, если такое невозможно, и вам нужно использовать одинаковый тип кавычек и для формулировки строки и внутри неё. Если вы попробуете сделать так
const str = "They call him "Harry", and he likes it";
то получите ошибку, потому что ваша строка поломана. Программа сломается в этом месте, потому что тут присутствует вторая закрывающая кавычка такого же типа, а затем идёт странное слово, которое ничего не означает, а потом новая строка. Это неправильный JavaScript.
Нам нужно объяснить интерпретатору JavaScript, что некоторые кавычки он должен воспринимать иначе. Они не должны означать «начало строки» или «конец строки», они должны означать «символ кавычек».
Это называется «экранированием». Добавьте символ экранирования, обратный слеш \ перед символом, и символ «изолируется» от своей специфической роли и превратится в обычный знак в строке.
const str = "They call him \"Harry\", and he likes it"; const str2 = 'They call her \'Ann\', and she likes it'; // They call him "Harry", and he likes it // They call her 'Ann', and she likes it
Этот символ экранирования может использоваться для включения других специальных символов в строку.
Тут есть три момента.
Первый: если нам нужен обратный слеш в строке, то он должен быть экранирован другим обратным слешем.
Второе: обратный слеш-t это не «экранируемый t-символ»: вам не нужно экранировать «t», «t» — это не специальный символ; вся конструкция обратный слеш-t — это специальная управляющая последовательность — она представляет собой единичную табуляцию, по сути — длинный пробел.
Третье: обратный слеш-n — это другая управляющая последовательность, которая представляет собой новую строчку. Считай, что вы нажмёте клавишу Enter, когда набираете текст. Поэтому, всё, что следует дальше, перейдет на новую строчку .
Теперь давайте попробуем написать функцию. Она будет принимать строку — имя и возвращать другую строку — приветствие. Вот как это должно работать:
const result = greet("Sherlock"); // "Well hello, Sherlock"
Эта функция должна уметь каким-то образом принимать входящую строку и склеивать её с другой строкой. Такой процесс называется «конкатенацией» и в JavaScript он реализуется знаком плюс, как при сложении чисел:
const greet = (str) => return "Well hello, " + str; >
Теперь другой пример. Эта функция принимает строку и возвращает ту же строку, но без каждой второй буквы. Например, «California» становится «Clfri».
const skip = (str) => let i = 0; let result = ''; while (i str.length) result = result + str[i]; i = i + 2; > return result; >
Такие квадратные скобки позволяют нам получать индивидуальные символы из строки. Как и во многих процессах в программировании, вы начинаете отсчёт с 0, а не от 1. Поэтому первый символ str это str[0] , второй — str[1] , и так далее. Это число называется «индексом».
Функция skip принимает аргумент, создаёт две переменных — i для счётчика и result для итоговой строки. Счётчик — это 0, потому что нам нужно начать с первого символа, а result это пустая строка — мы будем добавлять символы к ней один за другим.
Затем следует цикл while, с условием , что «i меньше, чем длина строки». Длина означает «сколько символов». Длина строки «cats» — 4 — в ней 4 символа, 4 буквы.
Пока счётчик меньше, чем длина, мы склеиваем или конкатенируем результирующую строку с символом по индексу i. Затем добавляем 2 к счётчику. Два, а не один, потому что нам нужно пропустить один символ.
В какой-то момент счетчик станет достаточно большим для того, чтобы условие цикла стало ложным, и функция вернёт result .
Давайте попробуем вызвать функцию с аргументом ‘cats’:
const skipped = skip('cats');
Длина ‘cats’ — 4. Несмотря на то, что индексы начинаются с 0, длина — это действительное количество. ‘c’ — не 0 букв, это одна буква. Поэтому длина ‘cats’ — 4, но индекс его последней буквы — 3.
- 0 меньше четырёх, поэтому войти в цикл while
- конкатенировать строку с символом по индексу 0 — это ‘c’
- увеличить счётчик на 2
- 2 меньше 4, поэтому повторить
- конкатенировать строку с символом по индексу 2 — это ‘t’. строка теперь стала ‘ct’
- увеличить счётчик на 2
- 4 не меньше 4, поэтому больше не повторять
- вернуть результат — ‘ct’
Вас ждут тест и практическое упражнение.
Дополнение к уроку
Неизменяемость
В JavaScript строки являются неизменяемыми, так же говорят «immutable». Это означает, что какие бы вы к ним не применяли функции, они не производят in-place замены (то есть не производят изменения самой строки). Любые строковые функции, примененные к строкам, возвращают новую строку. Это верно и в том случае, когда мы обращаемся к конкретному символу в строке.
const str = 'hello'; // toUpperCase возвращает ту же строку в верхнем регистре str.toUpperCase(); // HELLO console.log(str); // => hello str[0].toUpperCase(); // H console.log(str); // => hello str[0] = 'W'; console.log(str); // => hello
Лексикографический порядок
Лексикографический порядок — это, другими словами, алфавитный порядок. Такой порядок используется в словарях, телефонных справочниках, записных книжках и так далее.
В JavaScript вы можете сравнивать строки с помощью > и < , и сравнение будет происходить именно лексикографически.
'a' 'b' // true 'a' > 'b' // false 'abc' > 'abc' // false 'abb' > 'abc' // false 'abd' > 'abc' // true
Помните, ‘8’ это не число, а строка.
Интерполяция
Кроме одиночных » и двойных кавычек «» , современный JavaScript содержит обратные тики (backticks):
С обратными тиками вы можете использовать интерполяцию, вместо конкатенации. Вот, смотрите:
const name = "Alex"; const a = 10; const b = 12; console.log(`His name was $name> and his age was $a + b>`);
Такой код выведет на экран His name was Alex and his age was 22 . Внутрь $<> вы можете поместить любое выражение.
Интерполяция — способ соединения строк через вставку значений переменных в строку-шаблон с помощью фигурных скобок.
Интерполяция предпочтительнее конкатенации. Мы советуем не использовать конкатенацию вообще. Вот некоторые из причин:
- Такой код заставляет больше думать, потому что синтаксически + больше смахивает на сложение.
- Из-за слабой типизации можно легко получить не тот результат. Конкатенация может породить ошибки.
- Сложные строки при использовании конкатенации невозможно нормально разобрать в голове и понять, как они устроены.
Выводы
- Строка — это последовательность символов
- Пустая строка — это тоже строка (последовательность нуля символов)
- Обозначается единичными или двойными кавычками
Создание строки с константой:
const str1 = "Hello"; const str2 = 'Hello';
Возможно включить кавычку одного типа внутрь строки, окружив её кавычками другого типа:
const str1 = 'They call him "Harry", and he likes it'; const str2 = "They call him 'Harry', and he likes it";
Если в строке используются кавычки того же типа, они должны быть экранированы с помощью обратного слеша \ :
const str1 = 'They call her \'Ann\', and she likes it'; const str2 = "They call her \"Ann\", and she likes it";
Если строка включает обратный слеш (именно как символ, который хочется иметь в строке), он должен быть экранирован другим обратным слешем:
const str = "This is a backslash \\ here" // This is a backslash \ here
Также существуют управляющие символы — специальные комбинации, которые генерируют невидимые детали:
const str = "There is a tab \t and here \ncomes the new line!" // Here is a tab and here // comes the new line!
\t — это табуляция, \n это перенос на новую строку.
Конкатенация строк
Строки могут склеиваться друг с другом. Такой процесс называется конкатенацией и задаётся символом + :
const name = "Alex"; const age = 22; console.log("His name is " + name + " and his age is " + age); // His name is Alex and his age is 22
Строки будут склеены в том порядке, в котором они указаны: «mos» + «cow» → «moscow» , а «cow» + «mos» → «cowmos»
Доступ к индивидуальным символам
str[i] это i-ый символ строки str , начинающейся с 0. Например, «hexlet»[0] это h , а «hexlet»[2] это x .
Вот функция, которая принимает строку и возвращает копию этой строки без каждой второй буквы. Например, «hexlet» становится «hxe».
const skip = (str) => let i = 0; let result = ''; while (i str.length) result = result + str[i]; i = i + 2; > return result; >
str.length это длина str , то есть количество символов. Это просто количество, поэтому мы не начинаем отсчёт от 0. Например, «food».length это 4.
Дополнительные материалы
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Об обучении на Хекслете
- Статья «Как учиться и справляться с негативными мыслями»
- Статья «Ловушки обучения»
- Статья «Сложные простые задачи по программированию»
- Урок «Как эффективно учиться на Хекслете»
- Вебинар « Как самостоятельно учиться »
Открыть доступ
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
- 130 курсов, 2000+ часов теории
- 1000 практических заданий в браузере
- 360 000 студентов
Наши выпускники работают в компаниях:
PHP: Переменные и конкатенация
Для закрепления предыдущей темы попробуем использовать переменные с конкатенацией. Синтаксически ничего не меняется: мы умеем конкатенировать (склеивать) две строки:
"Kingsroad"
… а значит сумеем конкатенировать строку и одну переменную, в которой записана строка:
"Kingsroad"
… и даже конкатенировать две переменные, в которых записаны строки:
"Kingsroad"
Задание
Сайты постоянно посылают письма своим пользователям. Типичная задача — сделать автоматическую отправку персонального письма, где в заголовке будет имя пользователя. Если где-то в базе сайта хранится имя человека в виде строки, то задача генерации заголовка сводится к конкатенации: например, нужно склеить строку Здравствуйте со строкой, где записано имя.
Напишите программу, которая будет генерировать заголовок и тело письма, используя уже готовые переменные, и выводить получившиеся строки на экран.
Для заголовка используйте переменные $firstName и $greeting , запятую и восклицательный знак. Выведите это на экран в правильном порядке.
Для тела письма используйте переменные $info и $intro , при этом второе предложение должно быть на новой строке.
Результат на экране будет выглядеть так:
Hello, Joffrey! Here is important information about your account security. We couldn't verify you mother's maiden name.
Выполните задание, используя только два print_r() .
Упражнение не проходит проверку — что делать?
Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:
- Обязательно приложите вывод тестов, без него практически невозможно понять что не так, даже если вы покажете свой код. Программисты плохо исполняют код в голове, но по полученной ошибке почти всегда понятно, куда смотреть.
В моей среде код работает, а здесь нет
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Мой код отличается от решения учителя
Это нормально , в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.
В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Прочитал урок — ничего не понятно
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.
Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.
Полезное
- Подумайте, с какой строкой и в каком порядке нужно склеивать переменные, чтобы получить такой двухстрочный вывод тела письма.
- Помните, что можно создать строку, которая содержит только управляющую последовательность \n .
Обработка строк через преобразование в массив — PHP: Массивы
Решить её можно множеством способов. Чем больше называет человек — тем лучше. К ним относятся:
- Посимвольный перебор строки. Эта задачка может быть решена двумя способами. Один из которых связан с использованием конечных автоматов, которым будет посвящён отдельный курс впереди.
- Регулярные выражения. Про них также есть отдельный курс.
- Через преобразование строки в массив слов.
Рассмотрим последний способ. Первым делом нужно превратить строку в массив. Для этого мы воспользуемся функцией explode() , которая разделяет строку, используя указанный разделитель. В нашем случае разделителем является пробел.
function capitalizeWords($sentence) $words = explode(' ', $sentence); // . >
Теперь, используя цикл, легко выполнить операцию capitalize, то есть приведение первой буквы каждого слова к верхнему регистру.
function capitalizeWords($sentence) $words = explode(' ', $sentence); $capitalizedWords = []; foreach ($words as $word) $capitalizedWords[] = ucfirst($word); > // . >
Последнее действие обратно первому. Нужно соединить слова и вернуть получившуюся строку наружу. Для соединения элементов массива в PHP используется функция implode() . Она, как и explode() , принимает на вход разделитель, который теперь используется для сборки строки.
function capitalizeWords($sentence) $words = explode(' ', $sentence); $capitalizedWords = []; foreach ($words as $word) $capitalizedWords[] = ucfirst($word); > return implode(' ', $capitalizedWords); > $greeting = 'hello from Malasia'; print_r(capitalizeWords($greeting)); // => Hello From Malasia
В случае, если строчку нужно разбить по символам, а не по словам, можно воспользоваться функцией mb_str_split() :
$chars = mb_str_split($text); foreach ($chars as $char) print_r($char); >
mb_str_split() принимает второй параметр, в котором можно указать количество символов в каждой группе (элементе получившегося массива). По умолчанию используется число 1, поэтому мы получаем массив, в котором каждый элемент — один символ. Но, если указать, например, 3, то в каждом элементе массива будет по три символа.
$text = 'Hello Friend'; $parts = mb_str_split($text, 3); print_r($parts); // => Array // => ( // => [0] => Hel // => [1] => lo // => [2] => Fri
Открыть доступ
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
- 130 курсов, 2000+ часов теории
- 1000 практических заданий в браузере
- 360 000 студентов
Наши выпускники работают в компаниях:
Как объединить две строки в PHP
Вы можете использовать оператор конкатенации PHP ( . ) Для объединения или соединения двух строк в PHP. Этот оператор специально разработан для строк. Посмотрим, как это работает:
Читайте также
Похожие примеры:
- Как вставить одну строку перед другой в PHP
- Как вставить одну строку после другой в PHP
- Как объединить два или более массива в один в PHP