Занятие №4 String работа со строками.

В этом занятии будут описаны основные методы типа String, работа с ними, а так же примеры их использования,  в конце занятия по традиции вас ожидают интересное домашнее задание.

Объявляем переменные String

Что бы начать работать со строками, нужно их создать. Для этого как и в предыдущем занятии мы объявляем переменную типа String. и присваиваем значение. В листинге 4.1 привидение два примера объявления и присвоения.

String s;
s="nookery.ru";

String w="JAVA";

листинг 4.1

В JAVA статические строки реализуются через класс String. Объект строки автоматически создается при использовании строковой литералы. А также для строк доступна операция +, позволяющая соединить несколько строк в одну это называется concatenation. Если один из операндов не строка, то он автоматически преобразуется в строку. Так же для этого имеется свой метод concat() доставшийся нам из ранних версий java  Все эти примеры вы можете видеть в листинге 4.2

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. Если мы сделаем так:

String age="девять"+5+4;

System.out.println(age);

листинг 4.3

То возраст нашего человека будет не девять, как мы думаем, у нас произойдет слияние строк, конкатенация описанная выше. А что бы этого не произошло нам надо поставить скобки в математическом вычислении, то есть выполнить последовательность операторов. Верный вариант выполнения вычисления в листинге 4.4

String age="девять"+(5+4);

System.out.println(age);

листинг 4.4

Теперь разберем основные методы в String которыми вы в будущем наверняка будите работать.

Метод indexOf();

Этот метод дает возможность поиска заданного символа в строке, с присвоением  переменной типу int  его номера в строке. Обратите внимание что в JAVA исчисления начинается не с единицы, а с нуля. То есть машины начинает считать с 0, а не как человек с 1. так же имейте ввиду пробел в предложении является то же символом, запомните это очень важно.  Все этом можно увидеть в листинге 4.5

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); //выводим номер нашего 
//символа в строке
      }
   }
run:
4
СБОРКА УСПЕШНО ЗАВЕРШЕНА (общее время: 0 секунд)

листинг 4.6

Как видно из листинга 4.6 Буква «е», а точнее символ, присвоился переменной порядковый номер из строки. Если посчитать с нуля до четырех, то порядковый номером нашего символа будет «е».

Метод  getChars();

Этот метод дает нам возможность получения нескольких символов из строки и присвоить их переменно. Однако в этом методе используется массив, о котором вы еще не знаете, но о методе я хотел бы вам рассказать. Пока что для себя представьте что массив это коробка в которую можно поместить множество вещей, но одного типа. В нашем случаи в коробку поместим диапазон символов и выведем их на экран.

В листинге 4.7 демонстрируется вариант использования метода getChars();

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,  с помощью оператора == сравниваются ссылки на объект. Рассмотрим пример:

 String a="Привет";
 String b="Привет";
 System.out.println(a==b);

У нас есть две переменные с одинаковым значением, но ссылки на объект у них разные, так как у нас есть переменная «а» которая ссылается на свой объект и переменная «b» которая ссылается на свой объект. И если мы используем оператор == ,то у нас программа покажет что они разные и она будет права, ведь ссылки на объект у них разные, До версии JAVA 8 вывод такой программы был бы false . Начиная с JAVA 8 таким оператором можно пользоваться но я бы не советовал, так как его использования возможно будет конфликтовать с другими версиями JAVA, и сравнения строк не произойдет.

Метод equals(); и equalsIgnorCase();

Для сравнения строк  используется метод equals(); так же есть похожий методы сравнения строк equalsIgnoreCase который игнорирует заглавные буквы и сравнивает последовательность символов в строке. Реализацию методов можно увидеть из листинга 4.7.1

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

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));

      }
   }
run:
дали строку
дали
СБОРКА УСПЕШНО ЗАВЕРШЕНА (общее время: 0 секунд)

листинг 4.7.2

Метод replace();

Этот метод позволяет производить замену символа или символов в строке, для этого в параметре метода указывается символ который необходимо заменить, вторым параметром указывается то, на что необходимо произвести замену. Посмотрим листинг 4.7.3 реализацию данного метода.

package myfirstprogram;

public class MyFirstProgram {
    
    public static void main(String[] args) {
    
         String s="Мир вокруг нас прекрасен"; //объявляем
 //переменную с со строковым параметром
 
     
//Производим замену слов в строке, на новые и выводим 
//результат
        System.out.println(s.replace("нас прекрасен", "жесток"));

 //Производим замену символов в строке, на новый и выводим //результат
 System.out.println(s.replace('а', 'о'));
      }
   }
run:
Мир вокруг жесток
Мир вокруг нос прекросен
СБОРКА УСПЕШНО ЗАВЕРШЕНА (общее время: 0 секунд)

листинг 4.7.3

Метод toLowerCase(); и toUpperCase();

Эти два метода как видно из названия преобразуют строку toLowerCase в нижний регистр, а toUpperCase в верхний регистр. Посмотрим пример в листинге 4.7.4

package myfirstprogram;


public class MyFirstProgram {
    

   
    public static void main(String[] args) {
    
 
        String s="Мир вокруг нас прекрасен"; 
    //объявляем переменную с со строковым параметром
 
      //Преобразуем строку в нижний регистр и выводим 
      //результат
        System.out.println(s.toLowerCase());
        
      //Преобразуем строку в верхний регистр и выводим 
      //результат
        System.out.println(s.toUpperCase());
        
      }
   
}
run:
мир вокруг нас прекрасен
МИР ВОКРУГ НАС ПРЕКРАСЕН
СБОРКА УСПЕШНО ЗАВЕРШЕНА (общее время: 0 секунд)

листинг 4.7.4

Метод trim();

Этот метод позволяет удалить все пробелы в начале и в конце строки. Смотрим листинг 4.7.5

package myfirstprogram;

public class MyFirstProgram {
    
    public static void main(String[] args) {
  //объявляем переменную с со строковым параметром  
 
        String s="    Мир вокруг нас прекрасен        "; 
 
      //Удаляем пробелы в начали строки и в конце и выводим
      //результат
        System.out.println(s.trim());
        
    }
  
}

run:
Мир вокруг нас прекрасен
СБОРКА УСПЕШНО ЗАВЕРШЕНА (общее время: 0 секунд)

Таблица методов String.

Все методы вы можете видеть в таблице ниже, а также в справочнике по java, но где его взять и как им пользоваться вы узнаете будущих уроках.

Для развертывания полно-экранной версии таблицы
нажмите кнопку в правом верхнем углу.

Тип возвращаемого значения  Название и аргументы	          Выполняемое действие
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.

Домашнее задание.

  1. Изучите внимательно таблицу, почитайте о методах и их действиях.
  2. Объявить переменную s типа String присвоить ей значение «nookery.ru» Вызывать метод length() переменной s и посмотреть результат вывода.
  3. Объявить переменную s типа String присвоить ей значение «nookery.ru» Использовать соответствующий метод замены, чтобы вывод на экране был текст «java like»
  4. Это задание будет не простым, вам необходимо в нем реализовать метод из таблицы что бы результат его был таким:
    run:
    true
    СБОРКА УСПЕШНО ЗАВЕРШЕНА (общее время: 0 секунд)

    Условия задания следующие, объявите две переменные типа String в одну из них присвойте данные «Мир вокруг нас прекрасен». Во вторую переменную присвойте «Мир» Сделайте реализацию кода с помощью метода из таблицы с выводом на экран таким образом, что бы вывод был как в приведенном примере выше.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.