Главная » Все файлы » Просмотр файлов из архивов » PDF-файлы » К. Арнольд, Д. Гослинг - Язык программирования Java

К. Арнольд, Д. Гослинг - Язык программирования Java, страница 9

PDF-файл К. Арнольд, Д. Гослинг - Язык программирования Java, страница 9 Языки программирования (53641): Книга - 7 семестрК. Арнольд, Д. Гослинг - Язык программирования Java: Языки программирования - PDF, страница 9 (53641) - СтудИзба2019-09-19СтудИзба

Описание файла

PDF-файл из архива "К. Арнольд, Д. Гослинг - Язык программирования Java", который расположен в категории "". Всё это находится в предмете "языки программирования" из 7 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .

Просмотр PDF-файла онлайн

Текст 9 страницы из PDF

Любые две строки с одинаковым содержимым будут иметь одинаковое значение хешкода, хотя и две разные строки тоже могут иметь одинаковый хеш-код. Хеш-коды нужны для работы с хеш-таблицами, такими, например, как вклассе Hashtable из java.util.Второй вспомогательный метод, intern, возвращает строку, содержимое которой совпадает с содержимым исходной строки. Однако для любыхдвух строк с одинаковым содержимым intern возвращает ссылку на один и тот же объект String, что позволяет проверять равенство строкпосредством сравнения ссылок вместо более медленной проверки содержимого строк.

Рассмотрим пример:int putIn(String key) {String uniqe = key.intern();int i;// проверить, имеется ли такой элемент в таблицеfor ( i = 0; i << tableSize; i++)if (table[i] == unique)return i;// если нет - добавитьtable[i] = unique;tableSize++;return i;}Все строки, хранящиеся в массиве table, получены в результате вызова intern. Массив просматривается в поисках строки, содержимое которойсовпадает с key. Если строка найдена, то поиск завершается. Если же такой строки нет, в конец массива добавляется строка, содержимое которойсовпадает с содержимым key. При работе с результатами вызовов intern сравнение ссылок на объекты эквивалентно сравнению содержимогострок, однако происходит существенно быстрее.8.4. Создание производных строкНекоторые из методов класса String возвращают новые строки, которые отчасти напоминают исходные, но подвергшиеся определенныммодификациям.

Напоминаем, что новые строки должны возвращаться из-за того, что объекты String доступны только для чтения. Например, дляизвлечения из строки фрагмента, ограниченного заданными символами, может применяться следующий метод:public static String quotedString(String from, char start, char end){int startPos = from.indexOf(start);int endPos = from.lastIndexOf(end);if (startPos == -1)// начальный символ не найденreturn null;else if (endPos == -1) // конечный символ не найденreturn from.substring(startPos);else// найдены оба символа-ограничителяreturn from.substring(startPos, endPos + 1);}Метод quotedString возвращает новый объект String, который содержит фрагмент строки from, начинающийся с символа start изаканчивающийся символом end.

Если найден символ start, но не найден end, то метод возвращает новый объект String, содержащий всесимволы от начальной позиции до конца строки. В работе quotedString используются две перегруженные формы метода substring. Первая из нихполучает только начальную позицию в строке и возвращает новую строку, содержащую все символы с заданной позиции, и до конца строки.Вторая форма получает и начальную, и конечную позиции и возвращает новую строку, содержащую все символы между соответствующимипозициями исходной строки; при этом начальный символ-ограничитель включается в подстроку, а конечный — нет. Именно из-за этогопринципа “до конца, но не включая конец” мы и прибавляем единицу к endPos, чтобы в подстроку вошли оба символа-ограничителя.

Например,вызовquotedString(“Il a dit “Bonjour!””, ‘“’, ‘”’);возвращает строку“Bonjour!”Ниже перечисляются остальные методы для создания производных строк:public String replace(char oldChar, char newChar)Возвращает новый объект String, в котором все вхождения символа old Char заменяются символом newChar.public String toLowerCase()Возвращает новый объект String, в котором каждый символ преобразуется в эквивалентный ему символ нижнего регистра (если он имеется).public String toUpperCase()Возвращает новый объект String, в котором каждый символ преобразуется в эквивалентный ему символ верхнего регистра (если он имеется).public String trim()Возвращает новый объект String, в котором удалены все пробелы в начале и конце строки.Метод concat возвращает новую строку, которая эквивалентна применению оператора + к двум строкам.

Следующие два оператора являютсяэквивалентными:newStr = oldStr.concat(“ (not)”);newStr = oldStr + “ (not)”;Упражнение 8.3Как показано выше, метод quotedString предполагает, что в исходной строке имеется всего один экземпляр подстроки с заданными символамиограничителями. Напишите версию метода, которая извлекает все такие строки и возвращает массив.8.5. Преобразование строкДовольно часто возникает необходимость преобразовать строку в значение другого типа (скажем, целого или логического) или наоборот.Согласно конвенции, принятой в Java, тип, к которому преобразуется значение, должен содержать метод, выполняющий преобразование.Например, преобразование из типа String в Integer должно выполняться статическим методом класса Integer.

Ниже приводится таблица всехконвертируемых типов, а также способы их преобразования в тип String и обратно:ТипВ StringИз StringbooleanString.valueOf(boolean)new Boolean(String).booleanValue()intString.valueOf(int)Integer.ParseInt(String, int base)longString.valueOf(long)Long.ParseLong(String, int base)floatString.valueOf(float)new Float(String).floatValue()doubleString.valueOf(double)new Double(String).doubleValue()Для логических значений, а также для значений с плавающей точкой сначала создается объект Float или Double, после чего определяется егочисленное значение.

Для значений с плавающей точкой не существует эквивалента метода parseInt, который напрямую выделяет значение изстроки.Не существует методов, которые переводили бы символы из форм, распознаваемых языком Java (\b, \udddd и т. д.) в переменные типа char илинаоборот. Вы можете вызвать метод String.valueOf для отдельного символа, чтобы получить строку, состоящую из одного данного символа.Также не существует возможности создать или преобразовать числовые строки в формат языка Java, в котором начальный 0 означаетвосьмеричную запись, а 0x — шестнадцатеричную.Преобразования в byte и short, а также обратные им производятся через тип int, поскольку соответствующие значения всегда лежат в диапазонеint; к тому же при использовании этих типов в вычисляемых выражениях они все равно преобразуются в int.Новые классы также могут поддерживать строковые преобразования; для этого в них следует включить метод toString и конструктор, которыйсоздает новый объект по строковому описанию.

Классы, включающие метод toString, могут использоваться в valueOf. В соответствии сопределением метода valueOf(Object obj), он возвращает либо строку “null”, либо obj.to String. Если все классы в вашей программе содержатметод toString, то вы сможете преобразовать любой объект в тип String вызовом valueOf.8.6. Строки и символьные массивыСодержимое строки может отображаться на символьный массив и наоборот. Часто в программе бывает необходимо предварительно построитьстроку в массиве char, после чего создать объект String по содержимому этого массива.

Если описанный ниже класс StringBuffer (допускающийзапись в строки) в каком-то конкретном случае не подходит, существует несколько методов и конструкторов класса String, помогающихпреобразовать строку в массив char или же массив char — в строку.Например, чтобы удалить из строки все вхождения определенного символа, можно воспользоваться следующим несложным алгоритмом:public static String squeezeOut(String from, char toss) {char[] chars = from.toCharArray();int len = chars.length;for (int i = 0; i << len; i++) {if (chars[i] == toss) {--len;System.arraycopy(chars, i + 1,chars, i, len - i);--i;// рассмотреть повторно}}return new String (chars, 0, len);}Метод squeezeOut сначала преобразует свою входную строку from в символьный массив при помощи метода toCharArray. Затем он в циклеперебирает элементы массива в поисках символа toss. Когда такой символ находится, длина возвращаемой строки уменьшается на 1, а всеследующие символы массива сдвигаются к началу.

Значение i уменьшается, чтобы можно было проверить новый символ в позиции i и выяснить,не следует ли удалить и его. Когда метод завершает просмотр массива, он возвращает новый объект String, содержащий “выжатую” строку. Дляэтого применяется конструктор String, которому в качестве аргументов передается исходный массив, начальная позиция внутри массива иколичество символов.Кроме того, имеется отдельный конструктор String, который получает в качестве параметра только символьный массив и использует егоцеликом. Оба этих конструктора создают копии массива, так что после создания String можно изменять содержимое массива — на содержимоестроки это не повлияет.При желании вместо конструкторов можно воспользоваться двумя статическими методами String.copyValueOf.

Например, метод squeezeOut могбы заканчиваться следующей строкой:return String.copyValueOf(chars, 0, len);Вторая форма copyValueOf получает один аргумент и копирует весь массив. Для полноты было решено сделать два статических метода copyValueOf эквивалентными двум конструкторам String.Метод toCharArray прост и достаточен в большинстве случаев. Когда желательно иметь больше возможностей для контроля за процессомкопирования фрагментов строки в символьный массив, можно воспользоваться методом getChars:public void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)Копирует символы из строки в массив. Символы заданной подстроки копируются в массив начиная с dst[dstBegin]. Подстрока представляет собойфрагмент исходной строки, который начинается с позиции srcBegin и заканчивается на srcEnd (но не включает ее!).

Любая попытка выхода запределы строки или массива char приводит к возбуждению исключения IndexOutOfBoundsException.8.7. Строки и массивы byteСуществуют методы, предназначенные для преобразования массивов 8-разрядных символов в объекты String в 16-разрядной кодировке Unicodeи наоборот. Эти методы помогают создавать строки Unicode из символов ASCII или ISO-Latin-1, которые являются первыми 256 символами внаборе Unicode. Данные методы аналогичны своим прототипам, предназначенным для работы с символьными массивами:public String(byte[] bytes, int hiByte, int offset, int count)Конструктор создает новую строку, состоящую из символов заданного подмассива, входящего в массив bytes с позиции offset и состоящего изcount символов. Старшие 8 бит каждого символа могут быть заданы в переменной hiByte, значение которой обычно равно 0, так как конструкторчаще всего используется для преобразования символов 8-разрядной кодировки ASCII или ISO-Latin-1 в 16-разрядные строки Unicode.

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5224
Авторов
на СтудИзбе
427
Средний доход
с одного платного файла
Обучение Подробнее