/
Программирование
/
Курс Java
/

Символы строки

Java: Символы строки

Иногда из строки нужно достать один символ. Сайт знает имя и фамилию пользователя, а вывести их хочет в сокращенном виде A. Ivanov. Для этого берут первую букву имени и ставят рядом точку.

В Java каждый символ строки имеет свой номер, который называют индексом. Отсчет начинается с нуля. У первого символа индекс 0, у второго 1 и дальше по порядку. Чтобы достать символ по индексу, у строки вызывают метод charAt(). Внутри скобок указывают нужный индекс.

var firstName = "Alexander";
System.out.println(firstName.charAt(0)); // => A

Метод charAt() вызывается у строки через точку. В скобках стоит аргумент 0, поэтому метод вернет самый первый символ. Структура такая же, как у других строковых методов. Сначала объект, потом точка, потом имя метода и скобки с аргументом.

Связь между символами и их индексами видно на схеме:

Символ  A  l  e  x  a  n  d  e  r
Индекс  0  1  2  3  4  5  6  7  8

Длина строки Alexander равна 9, поэтому индекс последнего символа равен 8, то есть 9 - 1. Чтобы достать последний символ, передают именно этот индекс:

var firstName = "Alexander";
System.out.println(firstName.charAt(8)); // => r

Что возвращает метод

Метод charAt() возвращает один символ. В Java для одиночного символа есть отдельный тип данных char. Значение типа char записывают в одинарных кавычках, например 'A'. Строка из двойных кавычек и одиночный символ из одинарных кавычек относятся к разным типам.

var firstName = "Alexander";
var letter = firstName.charAt(0);
System.out.println(letter); // => A

Здесь результат вызова сохраняется в переменную letter. Это удобно, когда символ нужен дальше в коде. Но переменная не обязательна, метод можно вывести сразу:

System.out.println("Hexlet".charAt(0)); // => H

Метод вызывается прямо у строкового литерала "Hexlet". Сначала вычисляется charAt(0), затем результат уходит в println().

Выход за границы строки

Индекс должен попадать внутрь строки. Если передать индекс больше последнего, программа завершится с ошибкой:

var firstName = "Alexander";
System.out.println(firstName.charAt(9));
// StringIndexOutOfBoundsException

В строке Alexander девять символов с индексами от 0 до 8. Индекса 9 нет, поэтому метод выбрасывает ошибку StringIndexOutOfBoundsException. Поэтому при работе с символами сначала проверяют длину строки и обращаются к символу только тогда, когда индекс точно внутри границ. Этот прием разбирается дальше в курсе.

Спецсимволы

Метод charAt() считает все символы подряд. Не только буквы и знаки, но и спецсимволы. Каждый из них занимает свою позицию и имеет индекс, даже если на экране его не видно.

Например, в строке "\nyou" под индексом 0 стоит \n (перенос строки), а под индексом 1 уже идет буква y. Поэтому вызов magic.charAt(1) вернет именно y.

var magic = "\nyou";
System.out.println(magic.charAt(1)); // => y

Задание

Выведите на экран второй символ строки "Hexlet". Используйте метод charAt() и помните, что индексы начинаются с нуля.

Ожидаемый вывод:

e

Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект

Нашли ошибку? Есть что добавить? Пулреквесты приветствуются