получим в строке 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());
Эти методы не учитывают алфавитное расположение символов в локальной кодировке.
Русские буквы расположены в Unicode по алфавиту, за исключением одной буквы. Заглавная буква Ё находится перед всеми кириллическими буквами, ее код '\u0401', а строчная буква ё — после всех русских букв, ее код '\u0451'.
Если вас такое расположение не устраивает, задайте свое размещение букв с помощью класса RuleBasedCollator из пакета java.text.
Сравнить подстроку данной строки this с подстрокой той же длины len другой строки str можно логическим методом
regionMatches(int ind1, String str, int ind2, int len);
Здесь ind1 — индекс начала подстроки данной строки this, ind2 — индекс начала подстроки другой строки str. Результат false получается в следующих случаях:
□ хотя бы один из индексов ind1 или ind2 отрицателен;
□ хотя бы одно из ind1 + len или ind2 + len больше длины соответствующей строки;
□ хотя бы одна пара символов не совпадает.
Этот метод различает символы, записанные в разных регистрах. Если надо сравнивать подстроки без учета регистров букв, то используйте логический метод:
regionMatches(boolean flag, int ind1, String str, int ind2, int len);
Читать дальше
Конец ознакомительного отрывка
Купить книгу