9 июн. 2015 г.

Строки. Часть 6 – методы класса String.

Часть методов класса String мы уже рассмотрели в предыдущих постах. Некоторые методы класса String такие же как и у классов StringBuilder и StringBuffer, поэтому здесь их рассматривать уже не будем. Сейчас кратко рассмотрим некоторые оставшиеся на примере простой программы:

Данная программа генерирует следующий вывод:

Str00037

Метод isEmpty() проверяет является ли строка пустой, то есть не содержащей ни одного символа. Не стоит это путать если переменная типа String содержит null ссылку, то есть не ссылается ни на какой объект.

Выбрать символ с индексом ind можно методом charAt(int ind). Если индекс ind отрицателен или больше, чем длина строки, возникает исключительная ситуация.

Все символы строки в виде массива символов можно получить методом toCharArray(), но с ним мы уже не раз сталкивались поэтому его нет в этом примере.

Если же надо включить в массив символов dst, начиная с индекса ind массива, подстроку от индекса begin включительно до индекса end исключительно, то используйте метод типа void:

getChars(int begin, int end, char[] dst, int ind)

В массив будет записано end-begin символов, которые займут элементы массива, начиная с индекса ind до индекса ind+(end-begin)-1.

 

Этот метод создает исключительную ситуацию в следующих случаях:

  • ссылка dst == null;
  • индекс begin отрицателен;
  • индекс begin больше индекса end;
  • индекс end больше длины строки;
  • индекс ind отрицателен;
  • ind+(end-begin) больше dst.length.

Если надо получить массив байтов, содержащий все символы строки в байтовой кодировке ASCII, то используйте метод getBytes(). Этот метод при переводе символов из Unicode в ASCII использует локальную кодовую таблицу. Если же надо получить массив байтов не в локальной кодировке, а в какой-то другой, применяйте метод getBytes(String encoding) или метод getBytes(Charset encoding).

Кода мы преобразовали строку str5 в массив byte, то получили отрицательные значения потому что коды латиницы лежат за пределами максимального положительного значения для byte, но если посмотреть на hex код этих отрицательных значений для byte, то к примеру –48 это шестнадцатеричное D0, что соответствует большой русской букве Р в кодировке CP1251.

Метод regionMatches()  сравнивает указанную часть строки с другой частью строки. Существует также перегруженная форма, которая игнорирует регистр символов при сравнении. Оба метода возвращают результат boolean. Вот общая форма этих двух методов:

regionMatches(int startIndex, String str2,  int str2StartIndex, int numChars)
regionMatches(boolean
ignoreCase, int startIndex, String str2,  int str2StartIndex, int numChars)

В обеих версиях startIndex задает индекс начала диапазона строки вызывающего объекта String. Строка, подлежащая сравнению, передается в str2. Индекс символа, начиная с которого нужно выполнять сравнение в str2, передается в str2StartIndex, а длина сравниваемой подстроки — в numChars. Во второй версии, если ignoreCase равно true, регистр символов игнорируется. В противном случае регистр учитывается.

В классе String определены два метода, представляющие собой более или менее специализированные формы regionMatches(). Метод startWith()  определяет, начинается ли заданный объект String с указанной строки. В дополнение endsWith() определяет, завершается ли объект String заданным фрагментом. Эти методы возвращают результат типа boolean. Так как методы достаточно просты, то я думаю достаточно примера в коде, чтобы понять как они работают.

Класс String предлагает два метода, которые позволяют вам выполнять поиск в строке определенного символа или подстроки.

indexOf()  — ищет первое вхождение символа или подстроки.
lastIndexOf()  — ищет последнее вхождение символа или подстроки.

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

Метод replace()  имеет две формы. Первая заменяет в исходной строке все вхождения одного символа другим. Вторая форма replace() заменяет одну последовательность символов на другую.

Метод contains() проверяет содержит ли проверяемая строка, строку переданную как аргумент метода и если содержит возвращает true, если нет – false.

Метод join() объединяет строки переданные как параметры и разделяет их разделителем, переданным в качестве первого параметра. В общем смотрите пример.

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

Метод trim() возвращает новую строку, в которой удалены начальные и конечные символы с кодами, не превышающими ' \u0020'.

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

Так же хочу отметить, что в примере приведенном выше рассмотрены не все ипостаси методов которые есть у класса String, поэтому, опять же, рекомендую смотреть исходники класса String в JDK, дабы обрести просветление по данной теме.

Комментариев нет:

Отправить комментарий