Ильдар Хабибуллин - Java 7 [Наиболее полное руководство]
- Название:Java 7 [Наиболее полное руководство]
- Автор:
- Жанр:
- Издательство:БХВ-Петербург
- Год:2012
- ISBN:978-5-9775-0735-6
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Ильдар Хабибуллин - Java 7 [Наиболее полное руководство] краткое содержание
Java 7 [Наиболее полное руководство] - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
Внимательный читатель, изучивший рис. 4.7, готов со мной не согласиться. Ну что же, действительно, символы хранятся в массиве, но он закрыт, как и все поля класса String.
Логический метод isEmpty(), появившийся в Java SE 6, возвращает true, если строка пуста, в ней нет ни одного символа.
Выбрать символ с индексом ind (индекс первого символа равен нулю) можно методом charAt(int ind). Если индекс ind отрицателен или не меньше, чем длина строки, возникает исключительная ситуация. Например, после определения
char ch = s.charAt(3);
переменная ch будет иметь значение 't' .
Все символы строки в виде массива символов можно получить методом toCharArray( ).
Если же надо включить в массив символов dst, начиная с индекса ind массива, подстроку от индекса begin включительно до индекса end исключительно, то используйте метод
getChars(int begin, int end, char[] dst, int ind) типа void. В массив будет записано end - begin символов, которые займут элементы массива, начиная с индекса ind до индекса ind + (end — begin) — 1.
Этот метод создает исключительную ситуацию в следующих случаях:
□ ссылка dst == null;
□ индекс begin отрицателен;
□ индекс begin больше индекса end;
□ индекс end больше длины строки;
□ индекс ind отрицателен;
□ ind + (end — begin) больше dst.length.
Например, после выполнения
char[] ch = {’К’, ’о’, ’н’, ’е’, ’ц’, ’ ’, ’с’, ’в’, ’е’, ’т’, ’а’};
"Пароль легко иайти".getChars(2, 8, ch, 2);
результат будет таков:
ch = {’К’, ’о’, ’р’, ’о’, ’л’, ’ь’, ' ', ’л’, ’е’, ’т’, ’а’};
Если надо получить массив байтов, содержащий все символы строки в байтовой кодировке ASCII, то используйте метод getBytes (). Этот метод при переводе символов из Unicode в ASCII использует локальную кодовую таблицу.
Если же надо получить массив байтов не в локальной кодировке, а в какой-то другой, применяйте метод getBytes (String encoding) или метод getBytes (Charset encoding).
Так сделано в листинге 5.1 при создании объекта msg. Строка "\"Россия в\"" перекодировалась в массив СР866-байтов для правильного вывода кириллицы в консольное окно Command Prompt операционных систем MS Windows.
Метод substring (int begin, int end) выделяет подстроку от символа с индексом begin включительно до символа с индексом end исключительно. Длина подстроки будет равна end — begin. Индекс можно задать любым целым типом, кроме типа long.
Метод substring ( int begin) выделяет подстроку от индекса begin включительно до конца строки.
Если индексы отрицательны, индекс end больше длины строки или begin больше, чем end, то возникает исключительная ситуация.
Например, после выполнения следующего фрагмента
String s = "Write once, run anywhere.";
String sub1 = s.substring(6, 10);
String sub2 = s.substring(16);
получим в строке sub1 значение "once", а в sub2-значение "anywhere.".
Метод split (String regExp) разбивает строку на подстроки, используя в качестве разделителей символы, входящие в параметр regExp, записывает подстроки в массив строк и возвращает ссылку на этот массив. Сами разделители не входят ни в одну подстроку.
Например, после выполнения следующего фрагмента
String s = "Write:once,:run:anywhere.";
String[] sub = s.split(":");
получим в строке sub[0] значение "Write", в строке sub[1] значение "once,", в строке sub[2] значение "run", а в sub[3] — значение "anywhere.".
Метод split(String regExp, int n) разбивает строку на n подстрок. Если параметр n меньше числа подстрок, то весь остаток строки заносится в последний элемент создаваемого массива строк. Применение метода
String[] sub = s.split(":", 2);
в предыдущем примере даст массив sub из двух элементов со значением sub[0], равным
"Write", и значением sub[1], равным "once, :run:anywhere.".
Разбить строку можно практически на любые подстроки, поскольку значением параметра regExp может быть любое регулярное выражение. Регулярное выражение (regular expression) — это шаблон для отбора строк, составляемый по сложным правилам, изложению которых посвящены целые книги. Регулярные выражения выходят за рамки нашей книги, но все-таки я приведу пример разбиения строки на слова, разделенные пробельными символами:
String[] word = s.split("\\s+");
Операция сравнения == сопоставляет только ссылки на строки. Она выясняет, указывают ли ссылки на одну и ту же строку. Например, для строк
String si = "Какая-то строка";
String s2 = "Другая строка";
сравнение s1 == s2 дает в результате false.
Значение true получится, только если обе ссылки указывают на одну и ту же строку, например после присваивания s1 = s2.
Интересно, что если мы определим s3 так:
String s3 = "Какая-то строка";
то сравнение s1 == s3 даст в результате true, потому что компилятор устроен так, что он создаст только один экземпляр константы "Какая-то строка" и направит на него все ссылки — и ссылку s1, и ссылку s3. Это не приводит к недоразумениям, поскольку строка типа String неизменяема.
Вы, разумеется, хотите сравнивать не ссылки, а содержимое строк. Для этого есть несколько методов.
Логический метод equals(Object obj), переопределенный из класса Object, возвращает true, если параметр obj не равен null, является объектом класса String, и строка, содержащаяся в нем, полностью идентична данной строке вплоть до совпадения регистра букв. В остальных случаях возвращается значение false.
Логический метод equalsIgnoreCase(Object obj) работает так же, но одинаковые буквы, записанные в разных регистрах, считаются совпадающими.
Например, s2.equals("другая строка") даст в результате false, а s2.equalsIgnoreCase( "другая строка" ) возвратит true.
Метод compareTo (String str) возвращает целое число типа int, вычисленное по следующим правилам:
1. Сравниваются символы данной строки this и строки str с одинаковым индексом, пока не встретятся различные символы с индексом, допустим, k или пока одна из строк не закончится.
2. В первом случае возвращается значение this.charAt(k) — str.charAt(k), т. е. разность кодировок Unicode первых несовпадающих символов.
3. Во втором случае возвращается значение this.length() — str.length(), т. е. разность длин строк.
4. Если строки совпадают, возвращается 0.
Если значение str равно null, возникает исключительная ситуация.
Нуль возвращается в той же ситуации, в которой метод equals () возвращает true.
Метод compareToIgnoreCase (String str) производит сравнение без учета регистра букв, точнее говоря, выполняется метод
this.toUpperCase().toLowerCase().compareTo( str.toUpperCase().toLowerCase());
Читать дальшеИнтервал:
Закладка: