|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Вопрос 6.5} В какой строке может возникнуть ошибка при компиляции данного кода? 1) 1; 2) 2; 3) 3; 4) компиляция без ошибок. Часть 2. Во второй части книги рассмотрены вопросы использования классов Java при работе со строками и файлами, для хранения объектов, при создании пользовательских интерфейсов, многопоточное и сетевое программирование с использованием классов из пакетов java.util, java.text, java.net, java.io, java.awt, javax.swing и др. Из-за ограниченности объема книги детальное рассмотрение библиотек классов невозможно. Подробное описание классов и методов можно найти в документации по языку Java, которой необходимо пользоваться каждому Java-программисту. Глава 7 ОБРАБОТКА СТРОК Строка в языке Java – это основной носитель текстовой информации. Это не массив символов типа char, а объект соответствующего класса. Системная библиотека Java содержит классы String, StringBuilder и StringBuffer, поддерживающие работу со строками и определенные в пакете java.lang, подключаемом автоматически. Эти классы объявлены как final, что означает невозможность создания собственных порожденных классов со свойствами строки. Кроме того, для форматирования и обработки строк применяются классы Formatter, Pattern, Matcher и другие. Класс String Каждая строка, создаваемая с помощью оператора new или с помощью литерала (заключённая в двойные апострофы), является объектом класса String. Особенностью объекта класса String является то, что его значение не может быть изменено после создания объекта при помощи какого-либо метода класса, так как любое изменение строки приводит к созданию нового объекта. При этом ссылку на объект класса String можно изменить так, чтобы она указывала на другой объект и тем самым на другое значение. Класс String поддерживает несколько конструкторов, например: String(), String(String str), String(byte asciichar[]), String(char[] unicodechar), String(StringBuffer sbuf), String(StringBuilder sbuild) и др. Эти конструкторы используются для создания объектов класса String на основе инициализации значениями из массива типа char, byte и др. Например, при вызове конструктора new String(str.getChars(), "UTF-8"), где str – строка в формате Unicode, можно установить необходимый алфавит с помощью региональной кодировки в качестве второго параметра конструктора, в данном случае кириллицу. Когда Java встречает литерал, заключенный в двойные кавычки, автоматически создается объект типа String, на который можно установить ссылку. Таким образом, объект класса String можно создать, присвоив ссылке на класс значение существующего литерала, или с помощью оператора new и конструктора, например: String s1 = "sun.com"; String s2 = new String("sun.com"); Класс String содержит следующие методы для работы со строками: String concat(String s) или “ + ” – слияние строк; boolean equals(Object ob) и equalsIgnoreCase(String s) –сравнение строк с учетом и без учета регистра соответственно; int compareTo(String s) и compareToIgnoreCase(String s) –лексикографическое сравнение строк с учетом и без учета регистра. Метод осуществляет вычитание кодов символов вызывающей и передаваемой в метод строк и возвращает целое значение. Метод возвращает значение нуль в случае, когда equals() возвращает значение true; boolean contentEquals(StringBuffer ob) –сравнение строки String substring(int n, int m) –извлечение из строки подстроки длины m-n, начиная с позиции n. Нумерация символов в строке начинается с нуля; String substring(int n) –извлечение из строки подстроки, начиная с позиции n; int length() – определение длины строки; int indexOf(char ch) – определение позиции символа в строке; static String valueOf( значение ) – преобразование переменной базового типа к строке; String toUpperCase()/toLowerCase() – преобразование всех символов вызывающей строки в верхний/нижний регистр; String replace(char с1, char с2) – замена в строке всех вхождений первого символа вторым символом; String intern() – заносит строку в “пул” литералов и возвращает ее объектную ссылку; String trim() – удаление всех пробелов в начале и конце строки; char charAt(int position) – возвращение символа из указанной позиции (нумерация с нуля); boolean isEmpty() – возвращает true, если длина строки равна 0; byte[] getBytes(), getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) – извлечение символов строки в массив байт или символов; static String format(String format, Object... args), format(Locale l, String format, Object... args) – генерирует форматированную строку, полученную с использованием формата, интернационализации и др.; String[] split(String regex), split(String regex, int limit) – поиск вхождения в строку заданного регулярного выражения (разделителя) и деление исходной строки в соответствии с этим на массив строк. Во всех случаях вызова методов, изменяющих строку, создается новый объект типа String. В следующем примере массив символов и целое число преобразуются в объекты типа String с использованием методов этого класса. /* пример # 1: использование методов: DemoString.java */ package chapt07; public class DemoString { static int i;
public static void main(String[] args) { char s[] = { 'J', 'a', 'v', 'a' }; // массив // комментарий содержит результат выполнения кода String str = new String(s); // str="Java" if (!str.isEmpty()) { i = str.length(); // i=4 str = str.toUpperCase(); // str="JAVA" String num = String.valueOf(6); // num="6" num = str.concat("-" + num); // num="JAVA-6" char ch = str.charAt(2); // ch='V' i = str.lastIndexOf('A'); // i=3 (-1 если нет) num = num.replace("6", "SE"); // num="JAVA-SE" str.substring(0, 4).toLowerCase(); // java str = num + "-6"; // str=”JAVA-SE-6” String[] arr = str.split("-"); for (String ss: arr) System.out.println(ss); } else { System. out. println("String is empty!"); } } } В результате будет выведен массив строк: JAVA SE При использовании методов класса String, изменяющих строку, создается новый измененный объект класса String. Сохранить изменения в объекте класса String можно только с применением оператора присваивания, т.е. установкой ссылки на этот новый объект. В следующем примере будет выведено последнее после присваивания значение str. /* пример # 2: передача строки по ссылке: RefString.java */ package chapt07; public class RefString { public static void changeStr(String s) { s.concat(" Microsystems"); // создается новая строка } public static void main(String[] args) { String str = new String("Sun"); changeStr (str); System. out. println(str); } } В результате будет выведена строка: Sun Так как объект был передан по ссылке, то любое изменение объекта в методе должно сохраняться и для исходного объекта, так как обе ссылки равноправны. Этого не происходит по той причине, что вызов метода concat(String s) приводит к созданию нового объекта. В следующем примере рассмотрены особенности хранения и идентификации объектов на примере вызова метода equals(), сравнивающего строку String с указанным объектом и метода hashCode(), который вычисляет хэш-код объекта. /* пример # 3: сравнение ссылок и объектов: EqualStrings.java */ package chapt07; public class EqualStrings { public static void main(String[] args) { String s1 = "Java"; String s2 = "Java"; String s3 = new String("Java"); System. out. println(s1 + "==" + s2 + ": " + (s1 == s2)); // true System. out. println(s1 + "==" + s3 + ": " + (s1 == s3)); // false System.out.println(s1 + " equals " + s2 + ": " + s1.equals(s2)); // true System.out.println(s1 + " equals " + s3 + ": " + s1.equals(s3)); // true System.out.println(s1.hashCode()); System.out.println(s2.hashCode()); System.out.println(s3.hashCode()); } } В результате, например, будет выведено: Java==Java: true Java==Java: false Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.009 сек.) |