Как узнать длину строки java
Как узнать длину строки java
Строка — это упорядоченная последовательность символов. В Java строка является основным носителем текстовой информации. Для работы со строками здесь используются следующие классы: String, StringBuilder, StringBuffer. В этом уроке речь пойдет о классе String, его на первых порах будет вполне достаточно.
В данном уроке рассматривается:
В уроке 6 уже упоминалась работа со строками, а именно, как создавать строку. Также частично со строками мы встречались в предыдущих уроках. В этом и следующих двух уроках мы углубим знания о строках. В этом уроке будут рассмотрены создание строк в Java и наиболее популярные методы при работе со строками. Следующий урок будет посвящен форматированию строк. И еще один урок будет на тему работы с регулярными выражениями в Java, поскольку регулярные выражения достаточно мощный и нужный инструмент при работе со строками.
Но начнем с самого начала.
Создание строк
Строка в Java является объектом, поэтому ее можно создать, как и любой другой объект, при помощи оператора new.
Также строку можно создать при помощи литерала (фразы заключенной в кавычки) следующим образом.
Обе строки, независимо от способа создания являются объектами — экземплярами класса String.
Важный момент: создание объектов при помощи литерала возможно только в классе String. Объекты любого другого класса при помощи литерала создать нельзя.
Можно также создать массив строк. Например, так:
Конкатенация или слияние строк в Java
Для того, чтобы объединить несколько разных строк в одну, в Java можно использовать перегруженные (специально для объектов String) операторы «+» и «=+».
Еще один важный момент : операторы «+» и «=+», перегруженные для String, являются единственными перегруженными операторами в Java. Программист здесь не имеет возможности самостоятельно перегружать какие-либо операторы (как, например, в С++ и некоторых других языках).
Пример 1:
На консоль будет выведено «Мама мыла раму»
Пример 2:
Пример 3:
Наиболее употребительные методы класса String
При использовании IDE можно легко увидеть, какие методы есть у класса и получить подсказку по их использованию. На примере IDE Eclipse: для того, чтобы открыть список методов и быстро выбрать подходящий, нужно после имени переменной поставить точку и нажать комбинацию клавиш CTRL + Space (пробел). После этого появится окно, как на рисунке 14.1, где будут перечислены все доступные методы класса.
При выборе метода из этого списка, справа (или слева) появится желтое окно с подсказкой по его использованию. При помощи нажатия Enter или двойного клика мыши метод можно вставить в ваш код, не прибегая к ручному набору.
Также после имени переменной и точки можно начать набирать вручную имя метода и после введения нескольких первых букв нажать CTRL + Space (пробел). При этом, если метод, начинающийся на эти буквы один, то он автоматически подставится в код, если методов несколько, то откроется окно, как на рисунке 14.1, где будут перечислены только те методы, которые начинаются с этих введенных вами букв.
Это было лирическое отступление о том, как облегчить себе жизнь. Далее рассмотрим методы, которые чаще всего используются при работе со строками. Некоторые задачи можно решить и без применения этих методов, но их знание значительно облегчает процесс программирования. В дальнейшем описании, первое слово, которое стоит перед названием метода — тип значения, которое возникнет в результате работы метода (значение, которое метод возвращает).
Еще раз конкатенация
String concat(String str) — производит ту же конкатенацию, что была описана выше, но использование этого метода из класса String положительно влияет на производительность и скорость программы. На небольших примерах это незаметно и не существенно, но в более серьезных приложениях стоит использовать этот метод. Результатом работы метода будет строка. Параметр, который нужно передавать в метод для конкатенации — тоже строка, о чем нам говорит значение в скобках (String str).
Перепишем пример 2, при помощи concat():
Определение количества символов в строке
Для того чтобы определить количество символов в строке, используется метод length.
int length() — возвращает длину строки. Длина равна количеству символов Unicode в строке.
Пример 4:
Извлечение символов из строки
Если нам требуется узнать, какой символ находиться в строке на конкретной позиции, можем использовать метод charAt.
char charAt(int index) — возвращает символ, находящийся по указанному индексу в строке. Результатом работы метода будет символ типа char. Параметр, который передается в метод — целое число. Первый символ в строке, подобно массивам, имеет индекс 0.
Пример 5: определить последний символ в строке.
Если мы хотим работать со строкой, как с массивом символов, можем конвертировать строку в массив при помощи метода toCharArray.
char[] toCharArray() — преобразует строку в новый массив символов.
Пример 6: поменять в строке символы пробела на точки при помощи преобразования в массив символов (для этой задачи есть более простое решение, нежели преобразование в массив, но об этом чуть позже).
Примечание: в данном случае мы не сможем использовать метод charAt. При помощи этого метода мы бы смогли только найти пробелы в строке, но не поменять их.
Извлечение подстроки из строки
String substring(int beginIndex, int endIndex) или substring(int beginIndex) — возвращает новую строку, которая является подстрокой используемой строки. В параметрах метода нужно указать индекс строки, с которого начинается подстрока и индекс, которым заканчивается. Также возможно указывать только начальный индекс. В этом случае будет возвращена подстрока от начального индекса и до конца строки.
Пример 7.
Разбиение строк
Для разбиения строк на части используется метод String[] split(String regex), который разбивает строку на основании заданного регулярного выражения. О регулярных выражениях поговорим в одном из следующих уроков. Здесь покажем пример простого разбиения строки заданного одним символом.
Пример 8.
Поиск в строке
boolean contains(CharSequence s) — проверяет, содержит ли строка заданную последовательность символов и возвращает true или false.
Пример 9.
boolean endsWith(String suffix) — проверяет завершается ли строка определенными символами и возвращает true или false.
Пример 10.
boolean startsWith(String prefix) или startsWith(String prefix, int toffset) — проверяет, начинается ли строка с определенных символов. Во втором случае можно указать позицию с которой необходимо начать поиск префикса.
Пример 11.
Пример 12
int lastIndexOf(int ch), lastIndexOf(int ch, int fromIndex), lastIndexOf(String str), lastIndexOf(String str, int fromIndex) — аналогично предыдущему случаю, только ищется последнее вхождение символа или подстроки в строке.
Модификация строк
Модификация строк не является модификацией как таковой. Дело в том, что объекты класса String после создания уже нельзя изменять. Но можно создать копию строки с изменениями. Именно это и делают следующие методы.
toLowerCase() — преобразовать строку в нижний регистр;
toUpperCase() — преобразовать строку в верхний регистр;
trim() — отсечь на концах строки пустые символы;
String replace(char oldChar, char newChar), replace(CharSequence target, CharSequence replacement) — замена в строке одного символа или подстроки на другой символ или подстроку.
Вспомним пример 6, где нужно было поменять в строке символы пробела на точки и перепишем его с использованием replace:
Сравнение строк
boolean equals(Object anObject) — проверяет идентичность строк. Возвращает true только в том случае, если в строках представлена одинаковая последовательность символов одной величены.
Пример 14
int compareTo(String anotherString) — так же проверяет идентичность строк, однако, в отличии от метода equals возвращает:
Данный метод предназначен для упорядочивания строк. Он позволяет сравнить строки между собой и определить предшествующую строку. Для того, чтобы реализовать такое сравнение метод сравнивает числовые значения букв.
Рассмотрим пример с именами «Маша» и «Миша». При сравнении этих двух имен (пример 15), метод compareTo укажет, что имя «Маша» предшествует имени «Миша» (выдав отрицательное число) или наоборот, «Миша» следует за «Маша» (выдав положительное число). При упорядочивании имен по алфавиту мы бы упорядочили эти имена именно так. Метод в данном случае определяет, что числовое значение буквы «а» в «Маша» меньше, чем числовое значение «и» в Миша.
Пример 15
Однако, в случае, если мы напишем «маша» с маленькой буквы и попробуем сравнить с «Миша», то получим положительное число.
То есть в данном случае имя «Миша» предшествует имени «маша». Это происходит потому, что в таблице символов Юникода буквы верхнего регистра предшествуют нижнему.
Для сравнения строк без учета регистра символов используется функция int compareToIgnoreCase(String str)
Как мы видим, при сравнивании «маша» с «Миша» мы снова получаем отрицательное значение, то есть «маша» предшествует имени «Миша».
Метод длины строки Java()
Метод Java String length() возвращает длину этой строки. Длина равна единицам кода Юникода в строке. Как получить длину строки в Java.
Функция Java String length() возвращает длину последовательности символов, представленных этим объектом.
Длина строки Java
Иногда нам приходится получать длину строки в java-программах, ниже фрагмент кода показывает, как это сделать.
Приведенный выше фрагмент будет выдавать результат в виде:
Допустим, у нас есть функция для печати длины строки, как показано ниже.
Обратите внимание, что я просто игнорирую и возвращаю вызов, если ввод равен нулю, вы можете зарегистрировать его или создать исключение или сделать что-либо еще в соответствии с вашими требованиями.
Длина строки Java для представления в Юникоде
Вот окончательная программа длины строки java.
На рисунке ниже показан результат, полученный вышеуказанной программой.
Длина строки Java без использования функции length()
Это очень интересный вопрос для интервью, есть много альтернативных и не рекомендуемых способов получить длину строки. Давайте просто посмотрим на них, они хороши для аргументации, но не используются в производственной среде.
Преобразование в массив символов и нахождение длины
Длина вызова массива символов
Используя функцию String lastIndexOf() умно
Я уверен, что будут и другие забавные способы найти длину строки без использования функции length (), я думаю, что приведенные выше самые простые. Это все для примера программы длины строки java.
14.1. Java — Строки и методы класса String
Строки — представляют собой последовательность символов. Строки в Java широко используются и являются объектами.
Платформа Java предоставляет класс строк (class String) для создания и работы со строками.
Содержание
Создание строк
Наиболее простой способ создать строку:
После каждого раза, когда компилятор встречает строковый литерал в коде, он создает строковый объект (String) со значение, в данном случае «Здравствуй, мир!».
Как и в случае с другими объектами, можно создавать строковые объекты, используя ключевое слово new и конструктор. Класс строк имеет одиннадцать конструкторов, которые позволяют обеспечить начальное значение строки, используя различные источники, таких как массив символов.
Пример
Получим следующий результат:
Примечание: Класс строк является неизменяемым, так что как только он будет создан, строковый объект не может быть изменен. Если есть необходимость сделать много изменений в строке символов, следует использовать классы строки буфера (String Buffer) и построитель строки (String Builder Classes).
Длина строки
Методы, используемые для получения информации об объекте, известны как методы доступа. Один из методов доступа, который можно использовать со строками является метод length(), он возвращает количество символов, содержащихся в строковом объекте.
Ниже представлен пример метода length(), который поможет определить длину строки.
Пример
Получим следующий результат:
Объединение строк в Java
Класс строк включает метод для объединения двух строк:
Возвращает новую строку string1, с добавленной строкой string2 в конце. Вы также можете использовать метод concat() со строковыми литералами:
Чаще строки объединяют оператором +:
Давайте посмотрим на следующем примере.
Пример
Получим следующий результат:
Создание формата строк
Мы уже изучали методы printf() и format() для вывода на печать с отформатированными числами. Класс строк в Java обладает эквивалентным методом format(), который возвращает строковый объект, а не потоковый объект (PrintStream).
Использование строкового статического метода format() позволяет создавать строку нужного формата, который можно использовать повторно, в отличие от одноразовых операторов print. Например вместо:
Вы также можете написать:
Методы класса строк
Ниже приведен список методов, поддерживаемых классом строк.
Строки
Содержание
Строки — представляют собой последовательность символов. Строки в Java широко используются и являются объектами.
Платформа Java предоставляет класс строк (class String) для создания и работы со строками.
Создание строк
Наиболее простой способ создать строку:
После каждого раза, когда компилятор встречает строковый литерал в коде, он создает строковый объект (String) со значение, в данном случае «Здравствуй, мир!».
Как и в случае с другими объектами, можно создавать строковые объекты, используя ключевое слово new и конструктор. Класс строк имеет одиннадцать конструкторов, которые позволяют обеспечить начальное значение строки, используя различные источники, таких как массив символов.
Пример
Получим следующий результат:
Примечание: Класс строк является неизменяемым, так что как только он будет создан, строковый объект не может быть изменен. Если есть необходимость сделать много изменений в строке символов, следует использовать классы строки буфера (String Buffer) и построитель строки (String Builder Classes).
Длина строки
Методы, используемые для получения информации об объекте, известны как методы доступа. Один из методов доступа, который можно использовать со строками является метод length(), он возвращает количество символов, содержащихся в строковом объекте.
Ниже представлен пример метода length(), который поможет определить длину строки.
Пример
Получим следующий результат:
Объединение строк в Java
Класс строк включает метод для объединения двух строк:
Возвращает новую строку string1, с добавленной строкой string2 в конце. Вы также можете использовать метод concat() со строковыми литералами:
Чаще строки объединяют оператором +:
Давайте посмотрим на следующем примере.
Пример
Получим следующий результат:
Создание формата строк
Мы уже изучали методы printf() и format() для вывода на печать с отформатированными числами. Класс строк в Java обладает эквивалентным методом format(), который возвращает строковый объект, а не потоковый объект (PrintStream).
Использование строкового статического метода format() позволяет создавать строку нужного формата, который можно использовать повторно, в отличие от одноразовых операторов print. Например вместо:
Вы также можете написать:
Методы класса строк
Ниже приведен список методов, поддерживаемых классом строк.
№ | Методы с описанием |
1 | char charAt(int index) Возвращает символ по указанному индексу. |
2 | int compareTo(Object o) Сравнивает данную строку с другим объектом. |
3 | int compareTo(String anotherString) Сравнивает две строки лексически. |
4 | int compareToIgnoreCase(String str) Сравнивает две строки лексически, игнорируя регистр букв. |
5 | String concat(String str) Объединяет указанную строку с данной строкой, путем добавления ее в конце. |
6 | boolean contentEquals(StringBuffer sb) Возвращает значение true только в том случае, если эта строка представляет собой ту же последовательность символов как указанно в буфере строки (StringBuffer). |
7 | static String copyValueOf(char[] data) Возвращает строку, которая представляет собой последовательность символов, в указанный массив. |
8 | static String copyValueOf(char[] data, int offset, int count) Возвращает строку, которая представляет собой последовательность символов, в указанный массив. |
9 | boolean endsWith(String suffix) Проверяет заканчивается ли эта строка указанным окончанием. |
10 | boolean equals(Object anObject) Сравнивает данную строку с указанным объектом. |
11 | boolean equalsIgnoreCase(String anotherString) Сравнивает данную строку с другой строкой, игнорируя регистр букв. |
12 | byte getBytes() Кодирует эту строку в последовательность байтов с помощью платформы charset, сохраняя результат в новый массив байтов. |
13 | byte[] getBytes(String charsetName Кодирует эту строку в последовательность байтов с помощью платформы charset, сохраняя результат в новый массив байтов. |
14 | void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) Копирует символы из этой строки в массив символов назначения. |
15 | int hashCode() Возвращает хэш-код для этой строки. |
16 | int indexOf(int ch) Возвращает индекс первого вхождения указанного символа в данной строке. |
17 | int indexOf(int ch, int fromIndex) Возвращает индекс первого вхождения указанного символа в данной строке, начиная поиск с указанного индекса. |
18 | int indexOf(String str) Возвращает индекс первого вхождения указанной подстроки в данной строке. |
19 | int indexOf(String str, int fromIndex) Возвращает индекс первого вхождения указанной подстроки в данной строке, начиная с указанного индекса. |
20 | String intern() Возвращает каноническое представление для строкового объекта. |
21 | int lastIndexOf(int ch) Возвращает индекс последнего вхождения указанного символа в этой строке. |
22 | int lastIndexOf(int ch, int fromIndex) Возвращает индекс последнего вхождения указанного символа в этой строке, начиная обратный поиск с указанного индекса. |
23 | int lastIndexOf(String str) Возвращает индекс последнего вхождения указанной подстроки в данной строке. |
24 | int lastIndexOf(String str, int fromIndex) Возвращает индекс последнего вхождения указанной подстроки в этой строке, начиная обратный поиск с указанного индекса. |
25 | int length() Возвращает длину строки. |
26 | boolean matches(String regex) Сообщает, соответствует ли или нет эта строка заданному регулярному выражению. |
27 | boolean regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len) Проверяет равны ли две области строки. |
28 | boolean regionMatches(int toffset, String other, int ooffset, int len) Проверяет равны ли две области строки. |
29 | String replace(char oldChar, char newChar) Возвращает новую строку, в результате, заменив все вхождения oldChar в этой строке на newChar. |
30 | String replaceAll(String regex, String replacement) Заменяет каждую подстроку строки, соответствующей заданному регулярному выражению с данной заменой. |
31 | String replaceFirst(String regex, String replacement) Заменяет первые подстроки данной строки, которая соответствует заданному регулярному выражению с данной заменой. |
32 | String[] split(String regex) Разделяет эту строку, окружая данным регулярным выражением. |
33 | String[] split(String regex, int limit) Разделяет эту строку, окружая данным регулярным выражением. |
34 | boolean startsWith(String prefix) Проверяет, начинается ли эта строка с заданного префикса. |
35 | boolean startsWith(String prefix, int toffset) Проверяет, начинается ли эта строка с указанного префикса, начиная с указанного индекса. |
36 | CharSequence subSequence(int beginIndex, int endIndex) Возвращает новую последовательность символов, которая является подпоследовательностью этой последовательности. |
37 | String substring(int beginIndex) Возвращает новую строку, которая является подстрокой данной строки. |
38 | String substring(int beginIndex, int endIndex) Возвращает новую строку, которая является подстрокой данной строки. |
39 | char[] toCharArray() Преобразует эту строку в новый массив символов. |
40 | String toLowerCase() Преобразует все символы в данной строке в нижний регистр, используя правила данного языкового стандарта. |
41 | String toLowerCase(Locale locale) Преобразует все знаки в данной строке в нижний регистр, используя правила данного языкового стандарта. |
42 | String toString() Этот объект (который уже является строкой!) возвращает себя. |
43 | String toUpperCase() Преобразует все символы в строке в верхний регистр, используя правила данного языкового стандарта. |
44 | String toUpperCase(Locale locale) Преобразует все символы в строке в верхний регистр, используя правила данного языкового стандарта. |
45 | String trim() Возвращает копию строки с пропущенными начальными и конечными пробелами. |
46 | static String valueOf(primitive data type x) Возвращает строковое представление переданного типа данных аргумента. |
Строки в Java, методы класса String
Для работы со строками в Java существует класс String. И для объявления новой строки можно использовать один из способов:
В последнем варианте 3 – это начальный индекс (индексы считаются с нуля), а 4 – это кол-во символов. То есть, строка str4 содержит строку «come».
Важной особенностью строк в Java является их неизменяемость. Это значит, что в строке нельзя попросту изменить какой-либо символ и получить другую строку. Все строки создаются и существуют в неизменном виде, пока не будут уничтожены (как правило, автоматически сборщиком мусора). А переменные str1, str2, str3 и str4 следует воспринимать лишь как ссылки на эти строки. То есть, в любой момент в программе можно записать такую конструкцию:
что означает изменение ссылки str1 на строку «hello», на которую указывает ссылка str3. Соответственно, если на первую строку «Java» не будет указывать никакая ссылка, то она автоматически уничтожается.
У класса String есть несколько полезных методов:
Название метода класса String
возвращает число символов в строке (длину строки)
возвращает строку в виде массива символов char[]
определяет является ли строка пустой
преобразует объект в строковый вид
сравнивает две строки
возвращает символ строки по индексу
возвращает группу символов
сравнивает строки с учетом регистра
сравнивает строки без учета регистра
сравнивает подстроки в строках
находит индекс первого вхождения подстроки в строку
находит индекс последнего вхождения подстроки в строку
определяет, начинается ли строка с подстроки
определяет, заканчивается ли строка на определенную подстроку
заменяет в строке одну подстроку на другую
удаляет начальные и конечные пробелы
возвращает подстроку, начиная с определенного индекса до конца или до определенного индекса
переводит все символы строки в нижний регистр
переводит все символы строки в верхний регистр
Разберем работу часто используемых методов класса String. Первый метод, как написано, возвращает длину строки. Например, если нам дана вот такая строка
то метод length() вернет значение 4
Далее, если к строке str2
применить метод toCharArray():
то получим массив символов с содержимым этой строки. Следующий пример. У нас есть пустая строка
тогда мы можем определить это, например, так:
Но, если строка задана вот так:
то это означает, что ссылка s не указывает ни на какой класс String и, соответственно, мы не можем вызывать методы этого класса. В этом случае проверку следует делать так:
мы здесь сначала проверяем: указывает ли ссылка s на объект класса и если это так, то только потом будет идти обращение к методу length().
Объединение строк
Для соединения строк можно использовать операцию сложения («+»):
При этом если в операции сложения строк используется не строковый объект, например, число, то этот объект преобразуется к строке:
будут сливаться в одно слово «HelloJava», если их объединить с помощью оператора +:
но если мы хотим, чтобы две подстроки при соединении были разделены пробелом, то можно воспользоваться методом join() следующим образом:
В общем случае вместо пробела здесь можно ставить любой разделитель в виде строки.
Обратите внимание, что каждый раз при объединении строк мы получали новую строку как результат объединения.
Извлечение символов и подстрок
Для извлечения символов по индексу в классе String определен метод
char charAt(int index)
Он принимает индекс, по которому надо получить символов, и возвращает извлеченный символ:
(здесь как и в массивах первый индекс равен 0).
Если надо извлечь сразу группу символов или подстроку, то можно использовать метод
getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
Сравнение строк
Для простого сравнения строк используются методы equals() (с учетом регистра) и equalsIgnoreCase() (без учета регистра). Оба метода в качестве параметра принимают строку, с которой сравниваются:
Обратите внимание, что в отличие сравнения числовых и других данных примитивных типов для сравнения строк не рекомендуется использовать оператор ==. То есть, записывать вот такое сравнение лучше не использовать:
(хотя, оно тоже будет работать). Вместо этого следует использовать метод equals() класса String.
Другая пара методов:
int compareTo(String str) и int compareToIgnoreCase(String str)
также сравнивают строки между собой, но в отличие от equals() они еще позволяют узнать больше ли одна строка другой или нет. Если возвращаемое значение этих методов больше 0, то первая строка больше второй, если меньше нуля, то, наоборот, вторая больше первой. Если строки равны, то возвращается 0.
Для определения больше или меньше одна строка, чем другая, используется лексикографический порядок. То есть, например, строка «A» меньше, чем строка «B», так как символ ‘A’ в алфавите стоит перед символом ‘B’. Если первые символы строк равны, то в расчет берутся следующие символы. Например:
Еще один специальный метод
сравнивает отдельные подстроки в пределах двух строк. Он имеет такие реализации:
Например, ниже в строке str1 сравнивается подстрока wor с подстрокой wor строки str2:
Поиск в строке
Метод startsWith() позволяют определить начинается ли строка с определенной подстроки, а метод endsWith() позволяет определить заканчивается строка на определенную подстроку:
Замена в строке
Метод replace() позволяет заменить в строке одну последовательность символов на другую:
Обрезка строк
Метод trim() позволяет удалить начальные и конечные пробелы:
Метод substring() возвращает подстроку, начиная с определенного индекса до конца или до определенного индекса:
Изменение регистра
Разбиение строки на подстроки
Метод split() позволяет разбить строку на подстроки по определенному разделителю. Разделитель – это какой-нибудь символ или набор символов (передается в качестве параметра). Например, разобьем текст на отдельные слова (учитывая, что слова разделены пробелом):
Видео по теме
#1 Установка пакетов и первый запуск программы
#2 Структура программы, переменные, константы, оператор присваивания
#3 Консольный ввод/вывод, импорт пакетов
#4 Арифметические операции
#5 Условные операторы if и switch
#6 Операторы циклов while, for, do while
#7 Массивы, обработка элементов массива
#8 (часть 1) Строки в Java, методы класса String
#9 Битовые операции И, ИЛИ, НЕ, XOR
#10 Методы, их перегрузка и рекурсия
© 2021 Частичное или полное копирование информации с данного сайта для распространения на других ресурсах, в том числе и бумажных, строго запрещено. Все тексты и изображения являются собственностью сайта