В этом занятии будут описаны основные методы типа String, работа с ними, а так же примеры их использования, в конце занятия по традиции вас ожидают интересное домашнее задание.
Объявляем переменные String
Что бы начать работать со строками, нужно их создать. Для этого как и в предыдущем занятии мы объявляем переменную типа String. и присваиваем значение. В листинге 4.1 привидение два примера объявления и присвоения.
1 2 3 4 |
String s; s="nookery.ru"; String w="JAVA"; |
листинг 4.1
В JAVA статические строки реализуются через класс String. Объект строки автоматически создается при использовании строковой литералы. А также для строк доступна операция +, позволяющая соединить несколько строк в одну это называется concatenation. Если один из операндов не строка, то он автоматически преобразуется в строку. Так же для этого имеется свой метод concat() доставшийся нам из ранних версий java Все эти примеры вы можете видеть в листинге 4.2
1 2 3 4 5 6 7 8 9 10 |
String a="Привет"; String b; b="мир!"; String c="2015 год"; System.out.println(a+b+c); System.out.println("Привет"+"мир!"+" 2015 год"); System.out.println(a.concat(b)); |
листинг 4.2
Последовательность выполнения операторов.
Это одна из ошибок новичков, по этому тут стоит разобраться. Допустим у нас есть переменная age («возраст») и мы хотим в ней сохранить строку возраста и и число возраста человека. Но нам необходимо произвести некое вычисление в переменной age типа String не заводя новой переменной типа int. Если мы сделаем так:
1 2 3 |
String age="девять"+5+4; System.out.println(age); |
листинг 4.3
То возраст нашего человека будет не девять, как мы думаем, у нас произойдет слияние строк, конкатенация описанная выше. А что бы этого не произошло нам надо поставить скобки в математическом вычислении, то есть выполнить последовательность операторов. Верный вариант выполнения вычисления в листинге 4.4
1 2 3 |
String age="девять"+(5+4); System.out.println(age); |
листинг 4.4
Теперь разберем основные методы в String которыми вы в будущем наверняка будите работать.
Метод indexOf();
Этот метод дает возможность поиска заданного символа в строке, с присвоением переменной типу int его номера в строке. Обратите внимание что в JAVA исчисления начинается не с единицы, а с нуля. То есть машины начинает считать с 0, а не как человек с 1. так же имейте ввиду пробел в предложении является то же символом, запомните это очень важно. Все этом можно увидеть в листинге 4.5
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
package myfirstprogram; public class MyFirstProgram { public static void main(String[] args) { String a="Привет мир"; //создаем строку char b='е'; //этот символ мы будем искать в нашей строке int c; //создаем переменную типа int c=a.indexOf(b); //вызываем метод и присваиваем //значение в переменную int1 System.out.println(c); //выводим номер нашего //символа в строке } } |
1 2 3 |
run: 4 СБОРКА УСПЕШНО ЗАВЕРШЕНА (общее время: 0 секунд) |
листинг 4.6
Как видно из листинга 4.6 Буква «е», а точнее символ, присвоился переменной порядковый номер из строки. Если посчитать с нуля до четырех, то порядковый номером нашего символа будет «е».
Метод getChars();
Этот метод дает нам возможность получения нескольких символов из строки и присвоить их переменно. Однако в этом методе используется массив, о котором вы еще не знаете, но о методе я хотел бы вам рассказать. Пока что для себя представьте что массив это коробка в которую можно поместить множество вещей, но одного типа. В нашем случаи в коробку поместим диапазон символов и выведем их на экран.
В листинге 4.7 демонстрируется вариант использования метода getChars();
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
package myfirstprogram; public class MyFirstProgram { public static void main(String[] args) { String s = "Я хочу стать программистом!"; //создаем строку int start = 7; //первый символ int end = 12;//конечный символ char box[] = new char[end - start];//задаем диапазон с //сохранением в массив символов s.getChars(start, end, box, 0);//вызываем метод с //параметрами System.out.println(box); //выводим наш диапазон символов } } |
листинг 4.7
Сравнение строк.
В JAVA можно производить сравнение строк, на возможность определения одинаковые ли они. И вы конечно вспомнили об операторе == которым можно проводить сравнения чисел. В случаи со String происходит все иначе, точнее было до JAVA 8, с помощью оператора == сравниваются ссылки на объект. Рассмотрим пример:
1 2 3 |
String a="Привет"; String b="Привет"; System.out.println(a==b); |
У нас есть две переменные с одинаковым значением, но ссылки на объект у них разные, так как у нас есть переменная «а» которая ссылается на свой объект и переменная «b» которая ссылается на свой объект. И если мы используем оператор == ,то у нас программа покажет что они разные и она будет права, ведь ссылки на объект у них разные, До версии JAVA 8 вывод такой программы был бы false . Начиная с JAVA 8 таким оператором можно пользоваться но я бы не советовал, так как его использования возможно будет конфликтовать с другими версиями JAVA, и сравнения строк не произойдет.
Метод equals(); и equalsIgnorCase();
Для сравнения строк используется метод equals(); так же есть похожий методы сравнения строк equalsIgnoreCase который игнорирует заглавные буквы и сравнивает последовательность символов в строке. Реализацию методов можно увидеть из листинга 4.7.1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
package myfirstprogram; public class MyFirstProgram { public static void main(String[] args) { String a = "Привет"; //Создаем две переменные с String b = "Привет"; //одинаковым значением //сравниваем строки System.out.println(a.equals(b)); //игнорируем заглавные буквы System.out.println(a.equalsIgnoreCase(b)); } } |
листинг 4.7.1
Методы редактирование строки.
Здесь опишем несколько методов позволяющих редактировать строки.
Метод substring()
Метод substring() перегруженный метод, что бы вам было понятно имеет два варианта исполнения. В первом случаи в параметр метода задается порядковый номер символа и начиная от этого символа, отображается остаток строки. Второй вариант этого метода, когда задаются два параметра, первый начало и конец строки для вывода. Что бы вам было наглядно понятно посмотрите пример листинга 4.7.2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
package myfirstprogram; public class MyFirstProgram { public static void main(String[] args) { String s="Создали строку"; //используем 1 вариант метода System.out.println(s.substring(3)); //используем 2 вариант метода System.out.println(s.substring(3, 7)); } } |
1 2 3 4 |
run: дали строку дали СБОРКА УСПЕШНО ЗАВЕРШЕНА (общее время: 0 секунд) |
листинг 4.7.2
Метод replace();
Этот метод позволяет производить замену символа или символов в строке, для этого в параметре метода указывается символ который необходимо заменить, вторым параметром указывается то, на что необходимо произвести замену. Посмотрим листинг 4.7.3 реализацию данного метода.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
package myfirstprogram; public class MyFirstProgram { public static void main(String[] args) { String s="Мир вокруг нас прекрасен"; //объявляем //переменную с со строковым параметром //Производим замену слов в строке, на новые и выводим //результат System.out.println(s.replace("нас прекрасен", "жесток")); //Производим замену символов в строке, на новый и выводим //результат System.out.println(s.replace('а', 'о')); } } |
1 2 3 4 |
run: Мир вокруг жесток Мир вокруг нос прекросен СБОРКА УСПЕШНО ЗАВЕРШЕНА (общее время: 0 секунд) |
листинг 4.7.3
Метод toLowerCase(); и toUpperCase();
Эти два метода как видно из названия преобразуют строку toLowerCase в нижний регистр, а toUpperCase в верхний регистр. Посмотрим пример в листинге 4.7.4
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
package myfirstprogram; public class MyFirstProgram { public static void main(String[] args) { String s="Мир вокруг нас прекрасен"; //объявляем переменную с со строковым параметром //Преобразуем строку в нижний регистр и выводим //результат System.out.println(s.toLowerCase()); //Преобразуем строку в верхний регистр и выводим //результат System.out.println(s.toUpperCase()); } } |
1 2 3 4 |
run: мир вокруг нас прекрасен МИР ВОКРУГ НАС ПРЕКРАСЕН СБОРКА УСПЕШНО ЗАВЕРШЕНА (общее время: 0 секунд) |
листинг 4.7.4
Метод trim();
Этот метод позволяет удалить все пробелы в начале и в конце строки. Смотрим листинг 4.7.5
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
package myfirstprogram; public class MyFirstProgram { public static void main(String[] args) { //объявляем переменную с со строковым параметром String s=" Мир вокруг нас прекрасен "; //Удаляем пробелы в начали строки и в конце и выводим //результат System.out.println(s.trim()); } } |
1 2 3 |
run: Мир вокруг нас прекрасен СБОРКА УСПЕШНО ЗАВЕРШЕНА (общее время: 0 секунд) |
Таблица методов String.
Все методы вы можете видеть в таблице ниже, а также в справочнике по java, но где его взять и как им пользоваться вы узнаете будущих уроках.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
Для развертывания полно-экранной версии таблицы нажмите кнопку в правом верхнем углу. Тип возвращаемого значения Название и аргументы Выполняемое действие char charAt(int index) Возвращает символ по указанному индексу. int codePointAt(int index) Возвращает символ (кодовая точка Юникода) по указанному индексу. int codePointBefore(int index) Возвращает символ (кодовая точка Юникода) до указанного индекса. int codePointCount(int beginIndex, int endIndex) Возвращает количество кодовых точек Юникода в указанном диапазоне. int compareTo(String anotherString) Производит лексикографическое сравнение двух строк. int compareToIgnoreCase(String str) Производит лексикографическое сравнение двух строк, игнорируя регистр символов. String concat(String str) Объединяет указанную строку с концом данной строки. boolean contains(CharSequence s) Возвращает истину если эта и только эта строка содержит указанную последовательность символов. boolean contentEquals(CharSequence cs) Сравнивает данную строку с указанным CharSequence. boolean contentEquals(StringBuffer sb) Сравнивает данную строку с указанным StringBuffer. static String copyValueOf(char[] data) Возвращает строку, которая представляет собой последовательность символов в указанном массиве. static String copyValueOf(char[] data, int offset, int count) Возвращает строку, которая представляет собой последовательность символов в указанном массиве. boolean endsWith(String suffix) Проверяет, заканчивается ли данная строка указанной. boolean equals(Object anObject) Сравнивает данную строку с указанным объектом. boolean equalsIgnoreCase(String anotherString) Сравнивает данную строку с указанной, игнорируя регистр символов. static String format(Locale l, String format, Object... args) Возвращает отформатированную строку, используя указанный регион, форматирующую строку и аргументы. static String format(String format, Object... args) Возвращает отформатированную строку, используя форматирующую строку и аргументы. byte[] getBytes() Кодирует заданную строку в последовательность байтов, используя платформенную кодировку по умолчанию; результат сохраняется в новый массив. byte[] getBytes(Charset charset) Кодирует заданную строку в последовательность байтов, используя указанную кодировку; результат сохраняется в новый массив. void getBytes(int srcBegin, int srcEnd, byte[] dst, int dstBegin) Неправильно преобразовывает символы в байты; вместо него следует использовать метод getBytes(). byte[] getBytes(String charsetName) Кодирует заданную строку в последовательность байтов, используя charsetName; результат сохраняется в новый массив. void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) Копирует символы из заданной строки в целевой массив символов. int hashCode() Возвращает хэш-код для этой строки. int indexOf(int ch) Возвращает индекс первого вхождения указанного символа. int indexOf(int ch, int fromIndex) Возвращает индекс первого вхождения указанного символа, начиная поиск с указанного индекса. int indexOf(String str) Возвращает индекс первого вхождения указанной подстроки. int indexOf(String str, int fromIndex) Возвращает индекс первого вхождения указанной подстроки, начиная поиск с указанного индекса. String intern() Возвращает каноническое представление строкового объекта. boolean isEmpty() Возвращает истину, если длина строки равна нулю. int lastIndexOf(int ch) Возвращает индекс последнего вхождения указанного символа. int lastIndexOf(int ch, int fromIndex) Возвращает индекс последнего вхождения указанного символа, начиная поиск в обратном порядке с указанного индекса. int lastIndexOf(String str) Возвращает индекс последнего вхождения указанной подстроки. int lastIndexOf(String str, int fromIndex) Возвращает индекс последнего вхождения указанной подстроки, начиная поиск в обратном порядке с указанного индекса. int length() Возвращает длину строки. boolean matches(String regex) Проверяет, соответствует ли данная строка указанному регулярному выражению. int offsetByCodePoints(int index, int codePointOffset) Возвращает индекс внутри данной строки, смещённый от указанного индекса на codePointOffset кодовых точек. boolean regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len) Проверяет, равны ли регионы двух строк. boolean regionMatches(int toffset, String other, int ooffset, int len) Проверяет, равны ли регионы двух строк. String replace(char oldChar, char newChar) Возвращает новую строку, производя замену всех вхождений oldChar на newChar. String replace(CharSequence target, CharSequence replacement) Возвращает новую строку, производя замену всех подстрок, соответствующих target, на строку replacement. String replaceAll(String regex, String replacement) Заменяет каждую подстроку данной строки, которая соответствует указанному регулярному выражению с указанной заменой. String replaceFirst(String regex, String replacement) Заменяет первую подстроку данной строки, которая соответствует указанному регулярному выражению с указанной заменой. String[] split(String regex) Разбивает строку на фрагменты, используя в качестве разделителей символы, входящие в аргумент regex, и возвращает ссылку на массив, составленный из этих фрагментов. String[] split(String regex, int limit) Разбивает строку на фрагменты, используя в качестве разделителей символы, входящие в аргумент regex, и возвращает ссылку на массив, составленный из этих фрагментов. boolean startsWith(String prefix) Проверяет, начинается ли данная строка с указанной. boolean startsWith(String prefix, int toffset) Проверяет, начинается ли подстрока данной строки с указанного индекса, начиная с указанного префикса. CharSequence subSequence(int beginIndex, int endIndex) Возвращает новую последовательность символов, представляющую собой подпоследовательность данной последовательности. String substring(int beginIndex) Возвращает новую строку, представляющую собой подстроку данной строки. String substring(int beginIndex, int endIndex) Возвращает новую строку, представляющую собой подстроку данной строки. char[] toCharArray() Преобразует данную строку в новый массив символов. String toLowerCase() Преобразует все символы данной строки в нижний регистр, используя правила по умолчанию. String toLowerCase(Locale locale) Преобразует все символы данной строки в нижний регистр, используя указанные правила. String toString() Данный объект возвращает сам себя. String toUpperCase() Преобразует все символы данной строки в верхний регистр, используя правила по умолчанию. String toUpperCase(Locale locale) Преобразует все символы данной строки в верхний регистр, используя указанные правила. String trim() Возвращает новую строку, из которой исключены все предшествующие и завершающие пробелы. static String valueOf(boolean b) Возвращает строковое представление аргумента boolean. static String valueOf(char c) Возвращает строковое представление аргумента char. static String valueOf(char[] data) Возвращает строковое представление массива char. static String valueOf(char[] data, int offset, int count) Возвращает строковое представление конкретного под массива указанного массива char. static String valueOf(double d) Возвращает строковое представление аргумента double. static String valueOf(float f) Возвращает строковое представление аргумента float. static String valueOf(int i) Возвращает строковое представление аргумента int. static String valueOf(long l) Возвращает строковое представление аргумента long. static String valueOf(Object obj) Возвращает строковое представление аргумента Object. |
Домашнее задание.
- Изучите внимательно таблицу, почитайте о методах и их действиях.
- Объявить переменную s типа String присвоить ей значение «nookery.ru» Вызывать метод length() переменной s и посмотреть результат вывода.
- Объявить переменную s типа String присвоить ей значение «nookery.ru» Использовать соответствующий метод замены, чтобы вывод на экране был текст «java like»
- Это задание будет не простым, вам необходимо в нем реализовать метод из таблицы что бы результат его был таким:
123run:trueСБОРКА УСПЕШНО ЗАВЕРШЕНА (общее время: 0 секунд)
Условия задания следующие, объявите две переменные типа String в одну из них присвойте данные «Мир вокруг нас прекрасен». Во вторую переменную присвойте «Мир» Сделайте реализацию кода с помощью метода из таблицы с выводом на экран таким образом, что бы вывод был как в приведенном примере выше.