Извлечение подстроки из строки
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

String substring(int beginIndex, int endIndex) или substring(int beginIndex) — возвращает новую строку, которая является подстрокой используемой строки. В параметрах метода нужно указать индекс строки, с которого начинается подстрока и индекс, которым заканчивается. Также возможно указывать только начальный индекс. В этом случае будет возвращена подстрока от начального индекса и до конца строки.

Пример.

String s = "www.mysite.com";String name = s.substring(4, s.length()-4);System.out.println(name); // на консоль выведет "mysite" String domain = s.substring(4);System.out.println(domain); // на консоль выведет "mysite.com" Разбиение строкДля разбиения строк на части используется метод String [] split ( String regex ), который разбивает строку на основании заданного регулярного выражения. О регулярных выражениях поговорим в одном из следующих уроков. Здесь покажем пример простого разбиения строки заданного одним символом. Пример.String isbn = "978-3-16-148410-0";//европейский штрихкод товараString[] isbnParts = isbn.split("-"); System.out.println("префикс EAN.UCC: " + isbnParts[0]);System.out.println("номер регистрационной группы: " + isbnParts[1]);System.out.println("номер регистранта: " + isbnParts[2]);System.out.println("номер издания: " + isbnParts[3]);System.out.println("контрольная цифра: " + isbnParts[4]); Результат работы программы:

префикс EAN.UCC: 978

номер регистрационной группы: 3

номер регистранта: 16

номер издания: 148410

контрольная цифра: 0

Поиск в строке

boolean contains(CharSequence s) — проверяет, содержит ли строка заданную последовательность символов и возвращает true или false.

Пример.

String s = "www.mysite.com";boolean isContain1 = s.contains("mysite");System.out.println(isContain1);// нашел - выведет true boolean isContain2 = s.contains("mysite.ru");System.out.println(isContain2);// не нашел - выведет false

 

boolean endsWith(String suffix) — проверяет завершается ли строка определенными символами и возвращает true или false.

Пример.

String s = "www.mysite.com"; //проверяем заканчивается ли строка суффиксом "com" boolean isComEnding = s.endsWith("com"); System.out.println(isComEnding);//выведет true //проверяем заканчивается ли строка суффиксом "ru" boolean isRuEnding = s.contains("ru"); System.out.println(isRuEnding);//выведет false

 

boolean startsWith(String prefix) или startsWith(String prefix, int toffset) — проверяет, начинается ли строка с определенных символов. Во втором случае можно указать позицию, с которой необходимо начать поиск префикса.

Пример.

String s = "www.mysite.com"; //Проверяем, начинается ли адрес с wwwboolean isWWW = s.startsWith("www"); if(isWWW){/* Eсли да, проверяем начинается ли имя сайтас "my". Поскольку адрес начинается с wwwпроверку начинаем с 4 символа*/boolean isNameStarts = s.startsWith("my", 4);}else{/* Eсли нет, проверяем начинается ли имя сайтас "my". Поскольку адрес не начинается с wwwпроверку производим с начала строки*/boolean isNameStarts = s.startsWith("my");}

int indexOf(int ch), indexOf(int ch, int fromIndex), indexOf(String str), indexOf(String str, int fromIndex) — метод indexOf применяется для поиска первого вхождения указанного символа в строке или первого вхождения указанной подстроки. Поиск также можно произвести с указанием позиции в строке от которой нужно начинать искать. Для поиска нужно указать соответствующие параметры. Метод возвращает число соответствующее индексу первого вхождения символа или подстроки. В случае отсутствия указанного символа или подстроки в строке, будет возвращена -1.

Пример

String data = "name:Igor\nsurname:Kolashnikov\nage:14\ntime:14:55";//разбиваем строку на несколько подстрок на основании// встречаемого символа новой строкиString[]lines=data.split("\n"); //проходим каждую подстрокуfor (String line : lines){ //находим индекс первого вхождения символа ":" в подстроке int pos = line.indexOf(":"); //вычленяем имя атрибута из подстроки String attributeName= line.substring(0,pos); //вычленяем значение атрибута String value = line.substring(pos+1,line.length()); //вывод на экран вычлененных значений в нужном нам формате. System.out.println(attributeName + " - " + value);}

int lastIndexOf(int ch), lastIndexOf(int ch, int fromIndex), lastIndexOf(String str), lastIndexOf(String str, int fromIndex) — аналогично предыдущему случаю, только ищется последнее вхождение символа или подстроки в строке.

 

Сравнение строк

В отличие от сравнения числовых и других данных примитивных типов для строк не применяется знак равенства ==. Вместо него надо использовать метод equals().

boolean equals(Object anObject) — проверяет идентичность строк. Возвращает true только в том случае, если в строках представлена одинаковая последовательность символов одной величины.

equalsIgnoreCase() (без учета регистра)

Пример

String str = "Я помню ЧУДНОЕ мгновенье";

String str2 = "я помню чудное мгновенье";

//строки не идентичны

System.out.println(str.equals(str2)); //false

 

//строки идентичны после перевода первой строки

//в нижний регистр

System.out.println(str.toLowerCase().equals(str2)); // true

 

Пример(уже делали) 2-й способ. Проверить, является ли введённое слово из 5 букв палиндромом. Если введённое слово не из 5 букв, то сообщать об ошибке. Программа должна обрабатывать ситуации, если регистр букв отличается и считать палиндромами слова вида «Комок», «РОТОР»

 

Scanner in=new Scanner (System.in);

    System.out.print("Введите слово из 5 букв:");

    String word=in.next();

    if (word.length()!=5) {

    System.out.println("Условие не выполнено!!!");

    return;

    }

            

    char[] word_two=new char[word.length()];

    for (int j=0,i=word.length()-1;i>=0;i--,j++)

    {word_two[j]=word.charAt(i);}

 

//Метод .toString() возвращает представление класса + хэшкод объекта в //шестнадцатиричном представлении, поэтому использовать word_two.toString() нельзя

 

    String word_three=new String(word_two);//так получаем из массива строку

        

    if (word.toLowerCase().equals(word_three.toLowerCase()))    

               System.out.print("Слово - палиндром");

    else

          System.out.print("Слово - не палиндром");

int compareTo ( String anotherString ), int compareToIgnoreCase ( String str ) — так же проверяет идентичность строк, однако, в отличии от метода equals возвращает:

· нулевое значение, если строки равны,

· целое отрицательное число, если первая строка предшествует второй

· целое положительное число, если первая строка следует за второй

 

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

Рассмотрим пример с именами «Маша» и «Миша». При сравнении этих двух имен, метод compareTo укажет, что имя «Маша» предшествует имени «Миша» (выдав отрицательное число) или наоборот, «Миша» следует за «Маша» (выдав положительное число). При упорядочивании имен по алфавиту мы бы упорядочили эти имена именно так. Метод в данном случае определяет, что числовое значение буквы «а» в «Маша» меньше, чем числовое значение «и» в Миша.

 

Пример

String name1 = "Маша";

String name2 = "Миша";

System.out.println(name1.compareTo(name2)); //-8

System.out.println(name2.compareTo(name1)); //8

 

Однако, в случае, если мы напишем «маша» с маленькой буквы и попробуем сравнить с «Миша», то получим положительное число.

System.out.println("маша".compareTo("Миша")); //32

 

То есть в данном случае имя «Миша» предшествует имени «маша». Это происходит потому, что в таблице символов Юникода буквы верхнего регистра предшествуют нижнему.

Для сравнения строк без учета регистра символов используется функция int compareToIgnoreCase(String str)

System.out.println("маша".compareToIgnoreCase("Миша")); //-8

 

Как мы видим, при сравнивании «маша» с «Миша» мы снова получаем отрицательное значение, то есть «маша» предшествует имени «Миша».

Примеры:

Дан список студентов группы. Отсортировать его по алфавиту.

String[] students= {"Иванов Сергей","Иващенко Андрей","Иващенко Антон","Айнагоз Степан","Иванов Серхио","Белоусов Дмитрий"};

System.out.println("Список студентов до сортировки:");

int i=0;

for (String st:students) {

    i++;  

    System.out.println(i+" "+st);

}

boolean change=true;

while (change) {

    change=false;

    for(i=0;i<students.length-1;i++) {

    if (students[i].compareTo(students[i+1])>0) {

              String temp=students[i];

              students[i]=students[i+1];

              students[i+1]=temp;

              change=true;

    }

}

}

System.out.println("Список студентов по алфавиту:");

i=0;

for (String st:students) {

i++;  

System.out.println(i+" "+st);

}

           

 

Регулярные выражения Regular Expressions

Регулярные выражения – эта система обработки текста, основанная на специальной системе записи образцов для поиска. Образец (pattern), задающий правило поиска, по-русски также иногда называют «шаблоном», «маской». Сейчас регулярные выражения используются многими текстовыми редакторами и утилитами для поиска и изменения текста на основе выбранных правил. Язык программирования Java также поддерживает регулярные выражения для работы со строками.

Например, при помощи регулярных выражений можно задать шаблоны, позволяющие: найти все последовательности символов «кот» в любом контексте, как то: «кот», «котлета», «терракотовый»; найти отдельно стоящее слово «кот» и заменить его на «кошка»; найти слово «кот», которому предшествует слово «персидский» или «чеширский»; убрать из текста все предложения, в которых упоминается слово кот или кошка.

Дата: 2018-11-18, просмотров: 551.