Как обратиться к элементу строки
Обработка текстовых строк является одной из важнейших задач на современных компьютерах. В языке C# имеются развитые средства по обработке строк. Ранее мы частично рассматривали работу со строками. Здесь разберёмся с этим вопросом более подробно.
Для хранения символьной информации в языке C# используется Unicode . Под один символ отводится 16 бит. Строка в C# представляет собой цепочку символов Unicode и является объектом класса System.String .
Создание строки
1)Строку с именем s можно создать так:
string s=»Это строка»;
2)Строка может содержать различные управляющие символы, например, символ перехода на новую строку ‘\n’ :
string s1=»Текст в \n две строки»;
Если вывести строку s1 на экран монитора, то текст напечатается в две строки:
3)Можно создавать строки с посимвольным соответствием — в этом случае все символы воспринимаются «как есть», т.е. управляющие символы в таких строках становятся обычными символами. Для того, чтобы показать, что в строке используется посимвольное соответствие, перед строкой записывают символ ‘@’ (Эт-коммерческое). Применим это для текста, который был в строке s1 :
string s2=@»Текст в \n две строки»;
Здесь строка выведется на печать «как есть»:
Текст в \n две строки
4)Если имеется массив символов Unicode типа char , то его можно преобразовать в строку. Для этого используется конструктор класса String() :
string s=new String(c);
Сейчас в s хранится строка:
5)Но можно построить новую строку не из всего массива типа char , а из его части:
s=new String(c, i, k);
В этом случае строка строится не из всего массива c , а начиная с элемента под номером i , и используется k символов. Вывод строки s на экран даёт следующее:
6)Можно создать строку, в которой будет многократно повторяться один и тот же символ:
string s=new String(‘*’, 10);
Получится строка из 10 символов «звёздочка».
Замечание . Не пытайтесь таким способом получать строку из строк. Вариант
string s = new String(«*», 10);
работать не будет ( «*» — это строка, а ‘*’ — это символ).
Консольный ввод-вывод строк
Выполняется просто. Достаточно использовать стандартные методы ReadLine() и WriteLine() класса Console :
Обращение к отдельным элементам строки
Если в строке имеется какая-либо информация, то можно эту строку обрабатывать посимвольно как массив. Индексы в строке так же начинаются с 0 . Текущая длина определяется свойством Length :
На экран будет выведено количество цифр, найденных в этой строке. Но здесь, как не сложно понять, к элементу строки используется доступ по чтению. А что будет, если мы попробуем менять символы в строке? Например, заменим все символы ‘2’ на ‘5’ :
В этом случае для строки
будет выдано сообщение об ошибке:
Невозможно присвоить значение свойству или индексатору ‘string.this[int]’ — доступ только для чтения (CS0200)
Решить проблему можно двумя путями: использовать методы класса String (для замены подойдёт метод Replace() ) или отказаться от класса String и использовать класс StringBuilder , для которого допустимо изменение отдельных элементов строки (так же, как это делалось в массиве).
Операции над строками
Для строк допустимы операция присваивания (смотри выше), сцепление строк (в конец первой строки добавляется вторая) и проверка на равенство или неравенство. Другие операции не допустимы.
1) Сцепление (слияние) строк:
string s1=»122″, s2=»123″;
string s1 = s + s2;
На экран будет выведено:
2) Проверка на равенство ( == ) или на неравенство ( != ):
string s1=»122″, s2=»123″;
Здесь будет напечатано:
Методы по обработке строк
Для строк в языке C# существует большое количество готовых методов, позволяющие выполнять различные действия над строками. Рассмотрим наиболее употребительные из них.
1) Конкатенация (сцепление, слияние) строк — используется статический метод Concat() :
string s = «123», s1 = «45»;
Результатом будет строка, содержащая обе исходные строки:
Интересно применение метода Concat() для объединения массива строк:
Результатом будет строка:
2) Копирование строки выполняется с помощью статического метода Copy() :
string s2 = String.Copy(s);
Тоже самое можно получить и с помощью оператора присваивания:
3) Получение подстроки — используется метод Substring() , например:
s = «Язык программирования C#»;
s2 = s.Substring(12, 3);
Здесь из исходной строки s , начиная с позиции 12 , копируется 3 символа и полученный результат заносится в строку s2 . На экране будет выведено:
4) Вставка подстроки — в заданную позицию ( 2 ) исходной строки s включаем подстроку ( «AB» ):
string s = «12345»
s2 = s.Insert(2, «AB»);
Результатом будет строка s2 , равная:
5) Замена символов и строк — используется метод Replace() . Имеется два варианта. Рассмотрим их оба.
а) Замена символов . Заменим в строке s все вхождения символа ‘2’ на ‘5’ :
string s = «123422»;
string s1 = s.Replace(‘2’, ‘5’);
Как видим, рассматриваемая ранее задача (попытка замены s[i]=’5′ ) при использовании метода Replace() решается предельно просто.
б) Замена строк . Заменим все слова «abc» на «alfa» :
string s1 = s.Replace(«abc», «alfa»);
К стати . Метод Replace() работает корректно даже в том случае, когда делается замена на строку, которая является расширением исходной. Например, заменим в тексте все вхождения слова «child» на «children» :
string s1 = s.Replace(«child», «children»);
Как видно из выведенного на экран текста, всё получилось так, как и ожидалось:
6) Удаление символов из строки (метод Remove () ) — в строке s удаляем k символов, начиная с позиции i :
string s = «123429»;
7) Поиск индекса первого вхождения символа в строке (метод IndexOf () ):
string s = «It is false»;
int i = s.IndexOf(‘f’);
Полученный результат (позиция символа ‘f’ ):
8) Поиск первого вхождения любого из символов массива в строке (метод IndexOfAny() ) — в строке s ищется позиция первого вхождения любого из символов массива x :
int i = s.IndexOfAny(x);
Полученный результат (позиция символа ‘
9) Поиск индекса последнего вхождения символа в строке (метод LastIndexOf () ):
string s = «It is false for»;
int i = s.LastIndexOf(‘f’);
Полученный результат (позиция последнего символа ‘f’ ):
10) Поиск последнего вхождения любого из символов массива в строке — в строке s ищется позиция последнего вхождения любого из символов массива x ( метод LastIndexOfAny() ):
int i = s.LastIndexOfAny(x);
Полученный результат (позиция символа ‘(‘ ):
Пример 1 . Дана символьная строка s , известно, что в этой строке есть хотя бы один символ «точка». Преобразовать строку, удалив из неё запятые, предшествующие первой точке, и заменив знаком * все символы пробела, встречающиеся после первой точки.
public static void Main(string[] args)
string s = «qwerty, t, r . abc f t»;
int k = s.IndexOf(«.»);
Console.WriteLine(«Первая точка находится в позиции: «+k);
string s1 = s.Substring(0, k);
s1 = s1.Remove(i, 1);
string s2 = s.Substring(k);
Console.Write(«Press any key to continue . . . «);
qwerty, t, r . abc f t
Первая точка находится в позиции: 13
qwerty t r .*abc*f*t
Press any key to continue . . .
Строки. Функции и методы строк

Итак, о работе со строками мы немного поговорили, теперь поговорим о функциях и методах строк.
Я постарался собрать здесь все строковые методы и функции, но если я что-то забыл — поправляйте.
Базовые операции
- Конкатенация (сложение)
При вызове методов необходимо помнить, что строки в Python относятся к категории неизменяемых последовательностей, то есть все функции и методы могут лишь создавать новую строку.
: Поэтому все строковые методы возвращают новую строку, которую потом следует присвоить переменной.
Таблица «Функции и методы строк»
| Функция или метод | Назначение |
|---|---|
| S = ‘str’; S = «str»; S = »’str»’; S = «»»str»»» | Литералы строк |
| S = «s\np\ta\nbbb» | Экранированные последовательности |
| S = r»C:\temp\new» | Неформатированные строки (подавляют экранирование) |
| S = b»byte» | Строка байтов |
| S1 + S2 | Конкатенация (сложение строк) |
| S1 * 3 | Повторение строки |
| S[i] | Обращение по индексу |
| S[i:j:step] | Извлечение среза |
| len(S) | Длина строки |
| S.find(str, [start],[end]) | Поиск подстроки в строке. Возвращает номер первого вхождения или -1 |
| S.rfind(str, [start],[end]) | Поиск подстроки в строке. Возвращает номер последнего вхождения или -1 |
| S.index(str, [start],[end]) | Поиск подстроки в строке. Возвращает номер первого вхождения или вызывает ValueError |
| S.rindex(str, [start],[end]) | Поиск подстроки в строке. Возвращает номер последнего вхождения или вызывает ValueError |
| S.replace(шаблон, замена[, maxcount]) | Замена шаблона на замену. maxcount ограничивает количество замен |
| S.split(символ) | Разбиение строки по разделителю |
| S.isdigit() | Состоит ли строка из цифр |
| S.isalpha() | Состоит ли строка из букв |
| S.isalnum() | Состоит ли строка из цифр или букв |
| S.islower() | Состоит ли строка из символов в нижнем регистре |
| S.isupper() | Состоит ли строка из символов в верхнем регистре |
| S.isspace() | Состоит ли строка из неотображаемых символов (пробел, символ перевода страницы (‘\f’), «новая строка» (‘\n’), «перевод каретки» (‘\r’), «горизонтальная табуляция» (‘\t’) и «вертикальная табуляция» (‘\v’)) |
| S.istitle() | Начинаются ли слова в строке с заглавной буквы |
| S.upper() | Преобразование строки к верхнему регистру |
| S.lower() | Преобразование строки к нижнему регистру |
| S.startswith(str) | Начинается ли строка S с шаблона str |
| S.endswith(str) | Заканчивается ли строка S шаблоном str |
| S.join(список) | Сборка строки из списка с разделителем S |
| ord(символ) | Символ в его код ASCII |
| chr(число) | Код ASCII в символ |
| S.capitalize() | Переводит первый символ строки в верхний регистр, а все остальные в нижний |
| S.center(width, [fill]) | Возвращает отцентрованную строку, по краям которой стоит символ fill (пробел по умолчанию) |
| S.count(str, [start],[end]) | Возвращает количество непересекающихся вхождений подстроки в диапазоне [начало, конец] (0 и длина строки по умолчанию) |
| S.expandtabs([tabsize]) | Возвращает копию строки, в которой все символы табуляции заменяются одним или несколькими пробелами, в зависимости от текущего столбца. Если TabSize не указан, размер табуляции полагается равным 8 пробелам |
| S.lstrip([chars]) | Удаление пробельных символов в начале строки |
| S.rstrip([chars]) | Удаление пробельных символов в конце строки |
| S.strip([chars]) | Удаление пробельных символов в начале и в конце строки |
| S.partition(шаблон) | Возвращает кортеж, содержащий часть перед первым шаблоном, сам шаблон, и часть после шаблона. Если шаблон не найден, возвращается кортеж, содержащий саму строку, а затем две пустых строки |
| S.rpartition(sep) | Возвращает кортеж, содержащий часть перед последним шаблоном, сам шаблон, и часть после шаблона. Если шаблон не найден, возвращается кортеж, содержащий две пустых строки, а затем саму строку |
| S.swapcase() | Переводит символы нижнего регистра в верхний, а верхнего – в нижний |
| S.title() | Первую букву каждого слова переводит в верхний регистр, а все остальные в нижний |
| S.zfill(width) | Делает длину строки не меньшей width, по необходимости заполняя первые символы нулями |
| S.ljust(width, fillchar=» «) | Делает длину строки не меньшей width, по необходимости заполняя последние символы символом fillchar |
| S.rjust(width, fillchar=» «) | Делает длину строки не меньшей width, по необходимости заполняя первые символы символом fillchar |
| S.format(*args, **kwargs) | Форматирование строки |
Для вставки кода на Python в комментарий заключайте его в теги
Как обратиться к элементу строки в java
В Java, чтобы обратиться к определенному элементу строки, можно использовать метод строк charAt() . Этот метод возвращает символ (тип данных char ), который находится в строке по указанному индексу:
Индексация символов в строке начинается с нуля. Первый символ имеет индекс 0, а последний - на единицу меньший длины строки:
var word = "Hello!"; word.charAt(0); // 'H' word.charAt(word.length() - 1); // '!'
Полезные методы для строк
Мы рассмотрели базовые понятия, касающиеся строк. Давайте пойдём дальше и рассмотрим, какие полезные операции мы можем выполнять со строками, используя встроенные функции, такие как поиск длины текстовой строки, объединение и разделение строк, замена одного символа из строки другим и многое другое.
| Необходимые знания: | Базовая компьютерная грамотность, базовое понимание HTML и CSS, понимание того, что такое JavaScript. |
|---|---|
| Задача: | Понять, что строки являются объектами, и изучить, как использовать некоторые из основных методов, доступных для этих объектов для управления строками. |
Строки как объекты
Почти всё в JavaScript является объектами. Когда вы создаёте строку, например:
let string = 'This is my string';
ваша переменная становится строковым объектом, и, как результат, ей доступно множество свойств и методов. Можете убедиться в этом, перейдя на страницу String и просмотрев на ней список свойств и методов!
Только не волнуйтесь! Большинство из них вам не нужно знать сейчас на ранней стадии вашего обучения. Но некоторые из них вы, возможно, будете использовать довольно часто. Их мы и рассмотрим.
Введем несколько примеров в консоль разработчика.
Поиск длины строки
Это легко — вы просто используете свойство length . Попробуйте ввести следующие строки:
let browserType = 'mozilla'; browserType.length;
Результатом должно быть число 7, потому что слово «mozilla» состоит из 7 символов. Это свойство можно применить, например, если вы захотите найти длины серии имён, чтобы их можно было отображать по порядку длины или сообщить пользователю, что имя пользователя, которое он ввёл в поле формы, слишком длинное, если оно превышает определённую длину.
Получение определённого строкового символа
Вы можете вернуть любой символ внутри строки, используя обозначение в квадратных скобках. Это означает, что вы добавляете квадратные скобки ([ ]) в конце вашего имени переменной. В квадратных скобках вы указываете номер символа, который хотите вернуть. Например, чтобы получить первую букву, нужно написать:
browserType[0];
Компьютеры считают от 0, а не 1! Чтобы получить последний символ любой строки, мы могли бы использовать следующую строку, объединив эту технику с свойством length :
browserType[browserType.length-1];
Длина слова «mozilla» равна 7, но, поскольку счёт начинается с 0, позиция последнего символа равна 6, поэтому нам нужна length-1 . Такой способ можно использовать, чтобы найти первую букву ряда строк и упорядочить их по алфавиту.
Поиск подстроки внутри строки и её извлечение
- Иногда вам может понадобиться выяснить, присутствует ли меньшая строка внутри большей (обычно мы говорим, что внутри строки есть подстрока). Это можно сделать с помощью метода indexOf () , который принимает одну parameter (en-US) - подстроку, которую вы хотите найти. Введите:
browserType.indexOf('zilla');
browserType.indexOf('vanilla');
Это должно дать вам результат -1. Такое значение возвращается, когда подстрока, в данном случае «vanilla», не найдена в основной строке. Вы можете использовать это, чтобы найти все экземпляры строк, которые не содержат подстроку «mozilla» (для обратного эффекта, используйте оператор отрицания):
if(browserType.indexOf('mozilla') === -1) < // сделать что-то, если 'mozilla' // не является частью этой строки >if(browserType.indexOf('mozilla') !== -1) < // сделать что-то, если 'mozilla' // является частью этой строки >
browserType.slice(0,3);
browserType.slice(2);
Примечание: второй параметр slice() не обязателен: если вы его не включите в код, обрезание закончится на конце оригинальной строки. Есть и другие варианты; изучите страницу slice () , чтобы узнать, что ещё вы можете узнать.
Изменение регистра
Строковые методы toLowerCase () и toUpperCase () преобразовывают все символы в строке в нижний или верхний регистр соответственно. Этот способ можно применить, если вы хотите нормализовать все введённые пользователем данные перед их сохранением в базе данных.
Попробуем ввести следующие строки, чтобы узнать, что происходит:
var radData = 'My NaMe Is MuD'; radData.toLowerCase(); radData.toUpperCase();
Обновление частей строки
Вы можете заменить одну подстроку внутри строки на другую подстроку, используя метод replace () . Этот метод работает очень просто на базовом уровне, но у него есть некоторые продвинутые свойства, но мы пока не будем вдаваться в детали.
Он принимает два параметра — строку, которую вы хотите заменить, и строку, которую вы хотите вставить вместо заменяемой. Попробуйте этот пример:
browserType.replace('moz','van');
Обратите внимание, что для фактического получения обновлённого значения, отражённого в переменной browserType в реальной программе, вам нужно будет установить значение переменной в результате операции; он не просто обновляет значение подстроки автоматически. Таким образом, вы должны были бы написать это: browserType = browserType.replace('moz','van');
Активные примеры обучения
В этом разделе мы дадим вам попробовать набить руку и вместе напишем код строковой манипуляции. В каждом упражнении ниже у нас есть массив строк и цикл, который обрабатывает каждое значение в массиве и отображает его в маркированном списке. Вам не нужно понимать массивы или циклы прямо сейчас — это будет объяснено в будущих статьях. Все, что вам нужно сделать в каждом случае, — написать код, который выводит строки в том формате, в котором мы предлагаем.
В каждом примере есть кнопка Сбросить, которую вы можете использовать для сброса кода, если вы допустили ошибку и не можете заставить его работать снова, а кнопку Показать решение вы можете нажать, чтобы увидеть потенциальный ответ, если вы действительно застрянете на решении.
Фильтрация приветственных сообщений
В первом упражнении мы начнём с простого: у нас есть множество сообщений поздравительных открыток, но мы хотим отсортировать их, чтобы перечислять только рождественские сообщения. Мы хотим, чтобы вы заполнили условный тест внутри структуры if( . ), чтобы проверить каждую строку и отобразить её в списке, только если это рождественское сообщение.
- Сначала подумайте о том, как вы можете проверить, является ли сообщение в каждом случае рождественским сообщением. Какая строка присутствует во всех этих сообщениях и какой метод вы можете использовать для проверки?
- Затем вам нужно будет написать условный тест операнд1 оператор операнд2. Соответствует ли результат слева результату справа? Или в этом случае вызов метода слева возвращает результат справа?
- Подсказка. В этом случае, вероятно, полезнее проверить, не является ли часть строки не равной (!==) определённому результату.
h2>Результатh2> div class="output" style="min-height: 125px;"> ul>ul> div> h2>Редактируемый кодh2> p class="a11y-label"> Нажмите Esc, чтобы выйти из поля ввода (Tab вставляет символ табуляции). p> textarea id="code" class="playable-code" style="height: 290px; width: 95%"> var list = document.querySelector('.output ul'); list.innerHTML = ''; var greetings = ['С днём рождения!', 'С Рождеством, любовь моя', 'Счастливого Рождества всей твоей семье', 'Ты — та, кто нужен мне на Рождество', 'Поправляйся скорее']; for (var i = 0; i < greetings.length; i++) < var input = greetings[i]; // Ваше решение должно быть в фигурных скобках // ниже: вы должны что-то добавить if (greetings[i]) < var result = input; var listItem = document.createElement('li'); listItem.textContent = result; list.appendChild(listItem); >> textarea> div class="playable-buttons"> input id="reset" type="button" value="Сбросить" /> input id="solution" type="button" value="Показать решение" /> div>
html font-family: sans-serif; > h2 font-size: 16px; > .a11y-label margin: 0; text-align: right; font-size: 0.7rem; width: 98%; > body margin: 10px; background: #f5f9fa; >
var textarea = document.getElementById("code"); var reset = document.getElementById("reset"); var solution = document.getElementById("solution"); var code = textarea.value; var userEntry = textarea.value; function updateCode() eval(textarea.value); > reset.addEventListener("click", function () textarea.value = code; userEntry = textarea.value; solutionEntry = jsSolution; solution.value = "Показать решение"; updateCode(); >); solution.addEventListener("click", function () if (solution.value === "Показать решение") textarea.value = solutionEntry; solution.value = "Спрятать решение"; > else textarea.value = userEntry; solution.value = "Показать решение"; > updateCode(); >); var jsSolution = "var list = document.querySelector('.output ul');\nlist.innerHTML = '';\nvar greetings = ['С днём рождения!',\n 'С Рождеством, любовь моя',\n 'Счастливого Рождества всей твоей семье',\n 'Ты — та, кто нужен мне на Рождество',\n 'Поправляйся скорее'];\n\nfor(var i = 0; i < greetings.length; i++) \n>"; var solutionEntry = jsSolution; textarea.addEventListener("input", updateCode); window.addEventListener("load", updateCode); // stop tab key tabbing out of textarea and // make it write a tab at the caret position instead textarea.onkeydown = function (e) if (e.keyCode === 9) e.preventDefault(); insertAtCaret("\t"); > if (e.keyCode === 27) textarea.blur(); > >; function insertAtCaret(text) var scrollPos = textarea.scrollTop; var caretPos = textarea.selectionStart; var front = textarea.value.substring(0, caretPos); var back = textarea.value.substring( textarea.selectionEnd, textarea.value.length, ); textarea.value = front + text + back; caretPos = caretPos + text.length; textarea.selectionStart = caretPos; textarea.selectionEnd = caretPos; textarea.focus(); textarea.scrollTop = scrollPos; > // Update the saved userCode every time the user updates the text area code textarea.onkeyup = function () // We only want to save the state when the user code is being shown, // not the solution, so that solution is not saved over the user code if (solution.value === "Показать решение") userEntry = textarea.value; > else solutionEntry = textarea.value; > updateCode(); >;
Исправление регистра (размера букв в тексте—прим. пер.)
В этом упражнении у нас есть названия городов в Великобритании, но написанных разным регистром. Мы хотим, чтобы вы изменили их так, чтобы они были в нижнем регистре, за исключением первой буквы. Хороший способ сделать это:
- Преобразуйте всю строку, содержащуюся в переменной input, в нижний регистр и сохраните её в новой переменной.
- Возьмите первую букву строки в этой новой переменной и сохраните её в другой переменной.
- Используя эту последнюю переменную в качестве подстроки, замените первую букву строчной строки первой буквой строчной строки, изменённой на верхний регистр. Сохраните результат этой процедуры замены в другой новой переменной.
- Измените значение переменной result на равную конечному результату (не input ).
Примечание: Подсказка — параметры строковых методов не обязательно должны быть строковыми литералами; они также могут быть переменными или даже переменными с вызываемым ими методом.
h2>Результатh2> div class="output" style="min-height: 125px;"> ul>ul> div> h2>Редактируемый кодh2> p class="a11y-label"> Нажмите Esc, чтобы выйти из поля ввода (Tab вставляет символ табуляции). p> textarea id="code" class="playable-code" style="height: 250px; width: 95%"> var list = document.querySelector('.output ul'); list.innerHTML = ''; var cities = ['лонДон', 'МанЧЕСТёр', 'БиРминГЕМ', 'лиВЕРпуЛЬ']; for(var i = 0; i < cities.length; i++) < var input = cities[i]; // пишите код ниже var result = input; var listItem = document.createElement('li'); listItem.textContent = result; list.appendChild(listItem); >textarea> div class="playable-buttons"> input id="reset" type="button" value="Сбросить" /> input id="solution" type="button" value="Показать решение" /> div>
html font-family: sans-serif; > h2 font-size: 16px; > .a11y-label margin: 0; text-align: right; font-size: 0.7rem; width: 98%; > body margin: 10px; background: #f5f9fa; >
var textarea = document.getElementById("code"); var reset = document.getElementById("reset"); var solution = document.getElementById("solution"); var code = textarea.value; var userEntry = textarea.value; function updateCode() eval(textarea.value); > reset.addEventListener("click", function () textarea.value = code; userEntry = textarea.value; solutionEntry = jsSolution; solution.value = "Показать решение"; updateCode(); >); solution.addEventListener("click", function () if (solution.value === "Показать решение") textarea.value = solutionEntry; solution.value = "Спрятать решение"; > else textarea.value = userEntry; solution.value = "Показать решение"; > updateCode(); >); var jsSolution = "var list = document.querySelector('.output ul');\nlist.innerHTML = '';\nvar cities = ['лонДон', 'МанЧЕСТёр', 'БиРминГЕМ', 'лиВЕРпуЛЬ'];\n\nfor(var i = 0; i < cities.length; i++) "; var solutionEntry = jsSolution; textarea.addEventListener("input", updateCode); window.addEventListener("load", updateCode); // stop tab key tabbing out of textarea and // make it write a tab at the caret position instead textarea.onkeydown = function (e) if (e.keyCode === 9) e.preventDefault(); insertAtCaret("\t"); > if (e.keyCode === 27) textarea.blur(); > >; function insertAtCaret(text) var scrollPos = textarea.scrollTop; var caretPos = textarea.selectionStart; var front = textarea.value.substring(0, caretPos); var back = textarea.value.substring( textarea.selectionEnd, textarea.value.length, ); textarea.value = front + text + back; caretPos = caretPos + text.length; textarea.selectionStart = caretPos; textarea.selectionEnd = caretPos; textarea.focus(); textarea.scrollTop = scrollPos; > // Update the saved userCode every time the user updates the text area code textarea.onkeyup = function () // We only want to save the state when the user code is being shown, // not the solution, so that solution is not saved over the user code if (solution.value === "Показать решение") userEntry = textarea.value; > else solutionEntry = textarea.value; > updateCode(); >;
Создание новых строк из старых частей
В этом последнем упражнении массив содержит кучу строк, содержащих информацию о железнодорожных станциях на севере Англии. Строки представляют собой элементы данных, которые содержат трёхбуквенный код станции, за которым следуют некоторые машиночитаемые данные, за которыми следует точка с запятой, а затем название станции, пригодное для чтения человеком. Например:
MAN675847583748sjt567654;Manchester Piccadilly
Мы хотим извлечь код станции и имя и поместить их в строку со следующей структурой:
MAN: Manchester Piccadilly
Мы бы рекомендовали реализовать это следующим образом:
- Извлеките трёхбуквенный код станции и сохраните его в новой переменной.
- Найдите номер символьного номера точки с запятой.
- Извлеките название для чтения человеком, используя номер индекса точки с запятой в качестве контрольной точки и сохраните его в новой переменной.
- Объедините две новые переменные и строковый литерал, чтобы сделать финальную строку.
- Измените значение переменной result равной конечной строке (не input ).
h2>Результатh2> div class="output" style="min-height: 125px;"> ul>ul> div> h2>Редактируемый кодh2> p class="a11y-label"> Нажмите Esc, чтобы выйти из поля ввода (Tab вставляет символ табуляции). p> textarea id="code" class="playable-code" style="height: 285px; width: 95%"> var list = document.querySelector('.output ul'); list.innerHTML = ''; var stations = ['MAN675847583748sjt567654;Manchester Piccadilly', 'GNF576746573fhdg4737dh4;Greenfield', 'LIV5hg65hd737456236dch46dg4;Liverpool Lime Street', 'SYB4f65hf75f736463;Stalybridge', 'HUD5767ghtyfyr4536dh45dg45dg3;Huddersfield']; for (var i = 0; i < stations.length; i++) < var input = stations[i]; // пишите ваш код ниже var result = input; var listItem = document.createElement('li'); listItem.textContent = result; list.appendChild(listItem); >textarea> div class="playable-buttons"> input id="reset" type="button" value="Сбросить" /> input id="solution" type="button" value="Показать решение" /> div>
html font-family: sans-serif; > h2 font-size: 16px; > .a11y-label margin: 0; text-align: right; font-size: 0.7rem; width: 98%; > body margin: 10px; background: #f5f9fa; >
var textarea = document.getElementById("code"); var reset = document.getElementById("reset"); var solution = document.getElementById("solution"); var code = textarea.value; var userEntry = textarea.value; function updateCode() eval(textarea.value); > reset.addEventListener("click", function () textarea.value = code; userEntry = textarea.value; solutionEntry = jsSolution; solution.value = "Показать решение"; updateCode(); >); solution.addEventListener("click", function () if (solution.value === "Показать решение") textarea.value = solutionEntry; solution.value = "Спрятать решение"; > else textarea.value = userEntry; solution.value = "Показать решение"; > updateCode(); >); var jsSolution = "var list = document.querySelector('.output ul');\nlist.innerHTML = '';\nvar stations = ['MAN675847583748sjt567654;Manchester Piccadilly',\n 'GNF576746573fhdg4737dh4;Greenfield',\n 'LIV5hg65hd737456236dch46dg4;Liverpool Lime Street',\n 'SYB4f65hf75f736463;Stalybridge',\n 'HUD5767ghtyfyr4536dh45dg45dg3;Huddersfield'];\n\nfor(var i = 0; i < stations.length; i++) "; var solutionEntry = jsSolution; textarea.addEventListener("input", updateCode); window.addEventListener("load", updateCode); // stop tab key tabbing out of textarea and // make it write a tab at the caret position instead textarea.onkeydown = function (e) if (e.keyCode === 9) e.preventDefault(); insertAtCaret("\t"); > if (e.keyCode === 27) textarea.blur(); > >; function insertAtCaret(text) var scrollPos = textarea.scrollTop; var caretPos = textarea.selectionStart; var front = textarea.value.substring(0, caretPos); var back = textarea.value.substring( textarea.selectionEnd, textarea.value.length, ); textarea.value = front + text + back; caretPos = caretPos + text.length; textarea.selectionStart = caretPos; textarea.selectionEnd = caretPos; textarea.focus(); textarea.scrollTop = scrollPos; > // Update the saved userCode every time the user updates the text area code textarea.onkeyup = function () // We only want to save the state when the user code is being shown, // not the solution, so that solution is not saved over the user code if (solution.value === "Показать решение") userEntry = textarea.value; > else solutionEntry = textarea.value; > updateCode(); >;
Заключение
Нельзя не согласиться с тем, что способность обрабатывать слова и предложения в программировании очень важна — особенно в JavaScript, поскольку веб-сайты — все связаны с людьми. Эта статья дала вам основы, которые вам нужно знать о манипуляции строками на данный момент. Это пойдёт вам на пользу, когда вы займётесь более сложными темами в будущем. Далее мы рассмотрим последний важный тип данных, на который нам нужно сосредоточиться в краткосрочной перспективе — массивы.
Found a content problem with this page?
- Edit the page on GitHub.
- Report the content issue.
- View the source on GitHub.
This page was last modified on 2 дек. 2023 г. by MDN contributors.