Главная страница

Java. Полное руководство. 8-е издание. С. Н. Тригуб Перевод с английского и редакция


Скачать 25.04 Mb.
НазваниеС. Н. Тригуб Перевод с английского и редакция
АнкорJava. Полное руководство. 8-е издание.pdf
Дата28.02.2017
Размер25.04 Mb.
Формат файлаpdf
Имя файлаJava. Полное руководство. 8-е издание.pdf
ТипДокументы
#3236
страница31 из 90
1   ...   27   28   29   30   31   32   33   34   ...   90
// Демонстрация применения equals() и equalslgnoreCase().
class'equalsDemo {
public static void main(String a r g s []) {
String si = "Привет s2 = "Привет s3 = "Пока s4 = "ПРИВЕТ + " эквивалентно " + s2 + " -> " +
s i .equals(s 2 ));
System.out.println(si + " эквивалентно " + s3 + " -> " +
s i .equals(s 3 ));
Глава 15. Обработка строк
4 0 1
System.out.println(sl + " эквивалентно " + s4 + " -> " +
s i .equals(s4)
)
;
System.out.println(sl + " эквивалентно, игнорируя регистр " +
s4 + " -> " + s l .equalsIgnoreCase(s 4 Вывод программы показан ниже.
Привет эквивалентно Привет -> true Привет эквивалентно Good-bye -> false
Привет эквивалентно ПРИВЕТ -> Привет эквивалентно, игнорируя регистр ПРИВЕТ -> Метод r e g io n M a tc h e s ( Этот метод сравнивает указанную часть строки с другой частью строки. Существует также перегруженная форма, которая игнорирует регистр символов при сравнении. Вот общая форма этих двух методов regionMatches(int н ачИ ндекс
,
String строка
начИндексСтроки2,
int
количСимволов)
boolean regionMatches(boolean
игнорироватьРеги стр int
начИндекс,
String строка
начИндексСтроки2,
int
количСимволов)
В обеих версиях
начИндекс задает индекс начала диапазона строки вызывающего объекта класса S t r i n g . Строка, подлежащая сравнению, передается в параметре строка. Индекс символа, начиная с которого нужно выполнять сравнение в параметре строка, передается в параметре
начИндексСтроки2
, а длина сравниваемой подстроки — в параметре
количСимволов. Во второй версии, если параметр
игнорироватьРегистр содержит значение t r u e , регистр символов игнорируется. В противном случае регистр учитывается.
Методы s t a r t s W i t h ( ) и e n d s W it h ( В классе S t r i n g определены два метода, представляющие собой более или менее специализированные формы метода r e g io n M a tc h e s (). Метод s t a r t W i t h () определяет, начинается ли заданный объект класса S t r i n g с указанной строки. В дополнение метод e n d s W ith () определяет, завершается ли объект класса
S t r i n g заданным фрагментом. Эти методы имеют следующую общую форму startsWith(String строка)
boolean endsWith(String
строка)
Здесь строка

фрагмент строки, наличие которого соответственно вначале или конце данного объекта класса S t r i n g нужно проверить. Если он присутствует, возвращается значение t r u e , иначе — значение f a l s e . Например,
"Foobar".endsWith("bar")
и
"Foobar".startsWith("Foo")
возвращают значение t r u e Вторая форма метода s t a r t s W i t h (), представленная здесь, позволяет задать начальный пункт startsWith(String строка int

начИндекс)

4 0 Часть II. Библиотека Здесь
начИндекс определяет индекс символа в исходной строке, с которого начинается поиск. Например 3)
возвращает значение Сравнение метода
e q u a l s
( ) и оператора Важно понимать различие между методом
e q u a l s (
) и оператором = = . Это два разных действия. Как было объяснено, метод
e q u a l s () сравнивает символы внутри объекта класса S t r i n g . Оператор сравнивает две ссылки на объекты и определяет, ссылаются ли они на один и тот же экземпляр. В следующей программе показано, как два разных объекта класса S t r i n g могут содержать одинаковые символы, но ссылки на эти объекты при сравнении будут неэквивалентными) против =
=
class EqualsNotEqualTo {
public static void main(String a r g s []) {
String si = "Привет s2 = new String(sl);
System.out.println(si + " equals " + s2 + " -> " +
s i .equals(s 2 ));
System.out.p r intln(si + " == " + s2 + " -> " + (si == Переменная si ссылается на экземпляр класса
String, созданный присвоением литерала "Привет. Объект, на который ссылается переменная s2, создается с использованием переменной si в качестве инициализатора. Таким образом, содержимое обоих объектов класса
String идентично, но это отличные друг от друга объекты. Это означает, что переменные si и s2 не ссылаются на один и тот же объекта потому неравны (при сравнении оператором ==), как доказывает вывод предыдущей программы.
Привет equals Привет -> true Привет == Привет -> Метод

c o m p a r e T o
( Зачастую недостаточно знать, что строки просто идентичны. Для приложений, выполняющих сортировку, нужно знать, какая из строк меньше, равна или больше следующей. Строка меньше другой, если она расположена передней в лексикографическом порядке. Строка больше другой, если расположена после нее. Метод по имени compareTo
() служит этой цели. Он определен интерфейсом
Comparable, который реализует класс
String. Метод имеет следующую общую форму,
int compareTo(String
строка)
Здесь строка
— это объект класса
String, сравниваемый с вызывающим объектом класса
String. Возвращаемый результат интерпретируется так, как показано в табл. 15.1.
Глава 15. Обработка строк
ДОЗ
Таблица 15.1. Возвращаемый результат метода
compareTo ()
Значение
Описание
Меньше нуля
Вызывающая строка меньше строки Больше нуля
Вызывающая строка больше строки
str
Нуль
Две строки эквивалентны
Ниже представлен пример программы, которая сортирует массив строк. Программа использует метод compareTo
() для определения порядка в алгоритме пузырьковой сортировки Пузырьковая сортировка объектов String,

class SortString {
static String a r r [] = {
"Now", "is", "the", "time", "for", "all", "good", "men",
"to", "come", "to", "the", "aid", "of", "their", "country"
};
public static void main(String a r g s []) {
for(int j = 0 ; j < arr.length; j++) {
for(int i = j + 1 ; i < arr.length; i++) {
if(arr[i].compareTo(arr[j]) < 0) {
String t = arr[j ]
;
a r r [j ] = arr[i];
a r r [i]
= t Выводом этой программы является список слов.
Now
aid
all
come
country
for
good
is
men
of
the
the
their
time
to
to
Как можно заметить из вывода этого примера, метод compareTo
() учитывает регистр букв. Слово "Now" идет прежде всех остальных, поскольку начинается с заглавной буквы, а заглавная буква имеет меньшее значение в наборе символов Если вы хотите игнорировать регистр символов при сравнении строк, используйте метод compareToIgnoreCase().
int compareToIgnoreCase(String строка b)bЭтот метод возвращает тот же результат, что и метод compareTo ()
, за исключением того, что регистр символов игнорируется. Вы можете попытаться подста­

4 0 Часть II. Библиотека вить этот метод в предыдущую программу. После этого слово "Now" уже не будет первым в списке.
Поиск строк
Класс S t r i n g предлагает два метода, которые позволяют выполнять поиск в строке определенного символа или подстроки.
• Метод in d e x O f () — ищет первое вхождение символа или подстроки.
• Метод l a s t In d ex O f () — ищет последнее вхождение символа или подстроки.
Эти два метода перегружены несколькими разными способами. Во всех случаях эти методы возвращают позицию в строке (индекс, где символ или подстрока была найдена, либо значение -1 — в случае неудачи.
Чтобы найти первое вхождение символа, применяется следующая форма indexOf(char

символ)
Чтобы найти последнее вхождение символа, применяется такая форма lastIndexOf(char

символ)
Здесь символ

это символ, который нужно искать.
Чтобы найти первое или последнее вхождение подстроки, применяется следующая форма indexOf(String строка
строка)
Здесь строка задает искомую подстроку.
Вы можете указать начальную позицию для поиска, воспользовавшись следующими формами indexOf(int символ int
начИ ндекс)
int lastlndexOf(int символ int
начИндекс)
int indexOf(String строка int
начИндекс)
int lastlndexOf(String строка int
начИндекс)
Здесь
начИндекс задает начальную позицию поиска. Для метода in d e x O f () поиск начинается от
начИндекс до конца строки, а для метода l a s t l n d e x O f () — от
начИндекс до нуля.
Следующий пример показывает, как использовать различные индексные методы для поиска внутри строки Демонстрация использования indexOf() и lastlndexOf().
class indexOfDemo {
public static void main(String a r g s []) {
String s = "Now is the time for all good men " +
"to come to the aid of their country.";
System.out.println(s);
System.out.println("indexOf(t )
= " +
s .indexOf(1t '));
System.out.println("lastlndexOf(t )
= " +
s .lastlndexOf('t '));
System.out.println("indexOf(the) = " +
s .indexOf("the"));
System.out.println("lastlndexOf(the) = " +
s .lastlndexOf("the"));
System.out.println("indexOf(t,
10) = " +
s .indexOf('t 1,
10));
System.out.println("lastlndexOf(t,
60) = " +
s .lastlndexOf('t 1,
60));
System.out.println("indexOf(the,
10) = " +
Глава 15. Обработка строк
4 0 5
s .indexOf("the" ,
10));
System.out.println("lastlndexOf(the,
60) = " +
s .lastlndexOf("t h e ", Ниже показан вывод этой программы .
Now is the time for all good men to come to the aid of their country.
indexOf(t) = 7
lastlndexOf(t)
= 65
indexOf(the) = 7
lastlndexOf(the) = 55
indexOf(t, 10) = 1 1
lastIndexOf(t ,
60) = 55
indexOf(the, 10) = 44
lastlndexOf(the,
60) = Модификация строк
П оскольку объекты класса S t r i n g неизм еняем ы , всякий раз, когда вы хотите их модифицировать, следует либо скопировать их содержимое в объект класса
S t r i n g B u f f e r или S t r i n g B u i l d e r , либо воспользоваться одним из следующих методов класса S t r i n g , которые создают новые копии строк с внесенными модификациями. Здесь описаны простейшие из этих методов.
Метод
s u b s t r i n g ( Вы можете извлечь подстроку, используя метод s u b s t r i n g ( ) . Этот метод имеет две формы. Первая форма такова substring(int
начИндекс)
Здесь
начИндекс указывает индекс, с которого начнется подстрока. Эта форма возвращает копию подстроки, которая начинается с позиции
начИндекс и продолжается до завершения вызывающей строки.
В торая формам етода s u b s t r i n g () позволяет указать как начальный, таки конечный индексы подстроки substring(int

начИндекс,
int
конИндекс)
Зд есь
начИндекс указывает индекс, скот о ро гона ч нет с я подстрока, а
конИндекс

точку конца подстроки. Возвращаемая строка содержит все символы, отпер вой позиции и доп осл ед ней, исключая ее.
В следующей программе метод s u b s t r i n g () используется для замены в строке всех экземпляров одной подстроки другой Замена подстроки
class StringReplace {
public static void main(String a r g s []) {
String org = "This is a test. This is, too.";
String search = "is";
String sub = "was";
String result = "";
int i ;
do { // замена всех совпадающих подстрок
System.out.println(org);
i = o r g .indexOf(search);
if (i != -1) {
result = o r g .substring(0, i);
}
}

4 0 Часть II. Библиотека Java
result = result + sub;
result = result + o r g .substring(i + search.length());
org = result;
}
} w h i l e (i != -1) Вывод этой программы показан ниже is a test. This is, too.
Thwas is a test. This is, too.
Thwas
was a test. This is, too.
Thwas
was a test. Thwas
is, too.
Thwas
was a test. Thwas was, Метод
c o n c a t ( Вы можете соединить две подстроки, используя метод c o n c a t ( ), как показано ниже conc a t (String
строка)
Этот метод создает новый строковый объект, содержащий вызываемую строку, к концу которой добавлено содержимое параметра строка Метод c o n c a t () выполняет туже функцию, что и оператор +. Например, следующий код помещает символы "o n etw o " в строку s2.
String si = "one";
String s2 = s i .concat("tw o "Код создает тот же результат, что и представленная ниже последовательность si = "one";
String s2 = si + "Метод
r e p l a c e ( Этот метод имеет две формы. Первая заменяет в исходной строке все вхождения одного символа другим replace(char исходный char
замена)
Здесь параметр исходный задает символ, который должен быть заменен символом замена. Возвращается результирующая строка. Например s = "Hello".replace('1', 'w ' помещает в строку s слово "Hewwo". Вторая форма метода r e p l a c e () заменяет одну последовательность символов на другую replace(CharSequence исходный CharSequence

замена)
Эта форма появилась в J2SE Метод
t r i m ( С помощью этого метода возвращается копия вызывающей строки, из которой удалены всеведущие и завершающие пробелы. Он имеет следующую общую форму Вот пример s = "
Hello World
".trim();
Глава 15. Обработка строк Л 0 В результате в строку s будет помещен текст "
Hello Метод trim
() достаточно удобен в составе других команд. Например, следующая программа приглашает пользователя ввести название штата, а затем отображает название города — столицы штата. Она использует метод trim
() для удаления всех предваряющих и завершающих пробелов, которые могут быть непреднамеренно введены пользователем Использование trim() для обработки команд
import java.io.*;
class UseTrim {
public static void main(String a r g s [])
throws IOException
{
// Создается BufferedReader с использованием System.in
BufferedReader br = new
BufferedReader(new InputStreamReader(System.in));
String Введите 'стоп' для завершения r i Введите штат ");
do {
str = b r .readLine();
str = str.trim(); // удалить пробелы
i f (s t r Иллинойс r i Столица - Спрингфилд
else i f (s t r .equals("Миссури"))
System.out.println("Столица — Джефферсон-сити.");
else if(str.equals("Калифорния"))
System.out.println("Столица- Сакраменто i f (s t r .equals("Вашингтон"))
System.out.println("Столица - Олимпия / . .
} w h i l e (!s t r .equals("стоп"));
}
Преобразование данных с помощью метода
valueOf
( Метод valueOf
() преобразует данные из внутреннего представления в читабельную для пользователя форму. Это статический метод, который перегружен в классе
String для всех встроенных в Java типов таким образом, что каждый тип может быть правильно преобразован в строку. Метод valueOf
() перегружен и для типа
Obj ect, поэтому объект типа любого класса, который вы создадите, также может использоваться в качестве аргумента. (Вспомните, что класс
Object — суперкласс для всех классов) Ниже показаны некоторые его формы String valueOf(double число)
static String valueOf(long число)
static String valueOf(Object объект)
static String valueOf(char
символы
[])
Как упоминалось ранее, метод valueOf
() вызывается тогда, когда требуется строковое представление некоторого другого типа данных — например, при операции конкатенации. Вы можете вызывать этот метод непосредственно с любым типом данных и получать адекватное представление типа
String. Все элементарные типы преобразуются в их общее строковое представление. Любой объект, который вы можете передать методу valueOf ()
, возвратит результат

4 0 Часть II. Библиотека методу toString
() объекта. Фактически вы можете просто вызвать метод to­
String
() и получить тот же результат.
Для большинства массивов метод valueOf
() возвращает зашифрованную строку, означающую, что это массив определенного типа. Для массивов типа char, однако, создается объект класса
String, содержащий все символы массива типа char. Он имеет следующую форму String valueOf(char символы int

начИндекс,
int
количСимволов)
Здесь символы
это массив, который содержит символы,
начИндекс
— начальная позиция в массиве, с которой начинается подстрока, а
количСимволов указывает длину подстроки.
Изменение регистра символов в строке
Метод toLowerCase
() преобразует все символы строки из верхнего регистра в нижний. Метод toUpperCase
() преобразует все символы строки из нижнего регистра в верхний. Небуквенные символы, такие как десятичные цифры, остаются неизменными. Вот простейшая форма этих методов toLowerCase()

String Оба метода возвращают объект класса
String, содержащий эквивалент вызывающей строки соответственно в нижнем или верхнем регистре. В обоих случаях преобразованием управляет заданный по умолчанию региональный язык.
Ни же показан пример, в котором используются методы toLowerCase () и toUpperCase().
// Демонстрация toUpperCase() и toLowerCase().
class ChangeCase {
public static void main(String args[])
{
String s = "Это тест n t l n (Исходная строка " + s ) ;
String upper = s .toUpperCase();
String lower = s Верхний регистр " + Нижний регистр " + Вывод приведенной выше программы.
1   ...   27   28   29   30   31   32   33   34   ...   90


написать администратору сайта