В этом руководстве вы познакомитесь с одной из самых важных структур (типов) данных программирования в Java — String. Строковые переменные могут использоваться для хранения текстовых (букв, цифр, символов) данных, связанных с программой.
Приложения Android написаны на Java, языке программирования. В Java есть несколько примитивных типов данных для различных типов чисел (целые числа, числа с плавающей запятой и т. Д.), Логических значений и одиночных символов. Помимо хранения текстовых данных в виде массивов или символов, Java также включает в себя мощный объектный класс, называемый String (java.lang.String), который аккуратно инкапсулирует текстовые данные и может использоваться для манипулирования контентом. В этом руководстве вы узнаете, как создавать, использовать и манипулировать строками различными способами, в том числе хранить их как ресурсы проекта Android.
Что вам нужно
Технически, вам не нужны никакие инструменты для завершения этого урока, но вам, безусловно, они понадобятся для разработки приложений для Android.
Для разработки приложений Android (или любых других приложений Java) вам необходима среда разработки для написания и создания приложений. Eclipse — это очень популярная среда разработки (IDE) для Java и предпочтительная IDE для разработки под Android. Он свободно доступен для операционных систем Windows, Mac и Linux.
Полные инструкции по установке Eclipse (включая поддерживаемые версии) и Android SDK см. На веб-сайте разработчиков Android .
Что такое строка?
На самом фундаментальном уровне программы Java разбиты на функциональные возможности и данные. Многие читаемые человеком данные представлены в виде слов, символов, знаков препинания, цифр и так далее. По сути, все, что пользователь может печатать на клавиатуре. Программисты называют это хранилище текстового содержимого «строковыми данными», но сами данные могут храниться с использованием различных структур данных, в зависимости от ваших требований:
- Класс Java String (java.lang.String) — это служебный класс для хранения строковых данных, которые не будут изменены.
- Класс Java StringBuilder (java.lang.StringBuilder) — это служебный класс для хранения строковых данных, которые будут изменены; используется, когда параллелизм не является проблемой.
- Класс Java StringBuffer (java.lang.StringBuffer) — это служебный класс для хранения строковых данных, которые будут изменены; используется, когда параллелизм является проблемой.
- Массив символьных примитивов или символьных (java.lang.Character) переменных
- Массив байтовых примитивов или байтовых (java.lang.Byte) переменных
- Различные другие структуры данных и классы объектов могут использоваться для хранения строковых данных.
Как видите, существует множество способов хранения строковых данных в Java. Например, следующие переменные Java представляют строку гласных символов различными способами (как байты, символы, представления Unicode или подстроки):
String strVowels = "aeiou"; char astrVowels [] = {'a', 'e', 'i', 'o', 'u'}; byte abyteVowels [] = {'a', 'e', 'i', 'o', 'u'}; byte abyteVowelsU [] = {'\ u0061', '\ u0065', '\ u0069', '\ u006F', '\ u0075'}; String uVowels = new String ("\ u0061 \ u0069F \ u0075"); CharSequence csVowels = (CharSequence) new String ("aeiou"); StringBuffer sbVowels = new StringBuffer ("a" + "e" + "iou"); StringBuilder sVowelBuilder = new StringBuilder (); sVowelBuilder.append ( 'а'); sVowelBuilder.append ( "EIO"); sVowelBuilder.append ( '\ u0075');
Класс String — это удобный класс, который используется чаще всего, особенно новичками. Вам также необходимо иметь представление о интерфейсе CharSequence (java.lang.CharSequence), так как он часто используется при работе с ресурсами Android.
Работа с классом String
Класс String доступен как часть пакета java.lang, который включен в Android SDK для использования разработчиками. Полную документацию по классу String можно найти в документации по Android SDK .
Класс String представляет неизменяемую (неизменяемую) последовательность символов Unicode (16-битная кодировка), подходящую для хранения символов на любом языке (английском, немецком, японском и т. Д.).
Так какое это имеет отношение к разработке Android? Ну, а строки используются для хранения контента, отображаемого на экранах приложений, или для хранения ввода, полученного от пользователя. Разработчики Android постоянно загружают, создают и обрабатывают строковые данные. Итак, давайте посмотрим на некоторые вещи, которые мы можем сделать с классом String.
Создание строк
Класс String имеет множество конструкторов для создания и создания экземпляров строковых переменных. Строковые переменные можно установить пустыми, используя ключевое слово null. Вы также можете установить его содержимое из байтовых, символьных или других строковых данных. Например, вот несколько способов создания строковых переменных для использования в ваших приложениях (некоторые инициализируются из переменных, таких как uVowels и sVowelBuilder, определенных ранее в этом руководстве):
String strVowels1 = "aeiou"; String strVowels2 = новая строка ("aeiou"); String strVowels3 = новая строка (sVowelBuilder); String strVowels4 = новая строка (sbVowels); String strVowels5 = новая строка (uVowels); String strVowels6 = новая строка (abyteVowels2); String strVowels7 = новая строка (abyteVowelsU); String strVowels8 = новая строка ("a" + "e" + "iou"); String strVowels9 = новая строка (новый символ [] {'\ u0061', '\ U0065', '\ u0069', '\ u006F', '\ u0075'}); String strVowels10 = новая строка (новый байт [] {'\ u0061', '\ u0065', '\ u0069', '\ u006F', '\ u0075'});
Использование строковых ресурсов Android
Вы также можете загружать строки из ресурсов приложения Android, если вы правильно их сохранили. Например, вы можете загрузить строковый ресурс для имени приложения в строковую переменную следующим образом:
String strAppName = getResources (). GetString (R.string.app_name);
Для этого необходимо, чтобы рассматриваемое приложение Android содержало строковый ресурс с именем app_name где-то в иерархии каталогов проекта / res / values. Например, файл с именем /res/values/strings.xml, который содержит следующее определение строки XML:
1
2
3
4
|
<?xml version=»1.0″ encoding=»utf-8″?>
<resources>
<string name=»app_name»>My Android App Name!</string>
</resources>
|
Простая итерация строки
Теперь давайте посмотрим на некоторые интересные вещи, которые вы можете сделать с объектами String. Во-первых, давайте сосредоточимся на функциях, доступных в самом классе String.
Полезно думать о строке как о последовательности символов. Таким образом, вы иногда хотите перебирать его содержимое, по одному символу за раз. Есть множество способов сделать это, но один простой способ — использовать цикл for (). Вы можете использовать метод String’s length (), чтобы определить, сколько символов у вас есть, и метод charAt (), чтобы получить определенный символ по его индексу, так же, как если бы вы использовали индекс массива. Например:
String strVowels = "AEIOU"; for (int i = 0; i <strVowels.length (); i ++) { char curChar = strVowels.charAt (i); }
Модификация строки: основы
Как упоминалось ранее, строковые переменные являются неизменяемыми или неизменяемыми. Это не означает, что вы не можете манипулировать текстовым содержимым переменной String, но каждый метод, который делает это, возвращает новую переменную String. Вот некоторые распространенные примеры методов класса String, которые генерируют новые переменные String:
- Метод concat () используется для объединения или объединения двух строк в новый объект String. Примечание. Вы также можете использовать оператор + для создания нового объекта String из деталей.
- Метод format () позволяет создавать параметризованные строковые шаблоны (более сложная тема для дальнейшего обсуждения)
- Методы replace () и replaceFirst () используются для замены одного символа или подстроки другой подстрокой. Метод replaceAll () поддерживает сопоставление с образцом регулярного выражения.
- Метод split () полезен для разбиения большей строки на многочисленные подстроки. Например, вы можете разбить список, разделенный запятыми, на массив объектов String, по одному для каждого элемента списка.
- Метод substring () используется для извлечения только части исходного объекта String.
- Методы toUpperCase () и toLowerCase () используются для изменения регистра строки, особенно полезно для нормализации строк.
- Метод trim () используется для удаления любых пробелов до или после содержимого String.
Имейте в виду, что каждый из этих методов выделяет новый экземпляр объекта String для хранения результата. Исходная переменная String остается без изменений.
Модификация строки: преобразование в верхний и нижний регистр
Иногда вы хотите преобразовать вашу строку в верхний или нижний регистр. Одной из причин, по которой вам может потребоваться изменить регистр строки, является нормализация строки, чтобы упростить реализацию поиска или сопоставления без учета регистра.
String strUpperCaseVersion = strVowels.toUpperCase (); String strLowerCaseVersion = strVowels.toLowerCase ();
Обратите внимание, что здесь вы создали две новые переменные String для использования. Исходная переменная String, strVowels, остается без изменений.
Модификация строки: расщепление
Иногда вы хотите быстро разобрать строку в подстроки. Вы можете сделать это, чтобы извлечь отдельные слова из предложения или списка тегов с разделителями и т. Д. Для этой цели вы можете использовать простые регулярные выражения с функцией split (). Например, следующий код извлекает отдельные слова (цвета) из строки:
String someWords = "Красный Оранжевый Желтый Зеленый Синий Индиго"; String aColors [] = someWords.split ("");
Если бы вы распечатали содержимое массива String с именем aColors, вы бы увидели, что:
aColors [0] = Красный aColors [1] = Orange aColors [2] = желтый aColors [3] = зеленый aColors [4] = синий aColors [5] = Индиго
Обратите внимание, что здесь вы создали новый массив, содержащий 6 новых переменных String для использования.
Простое соответствие строк
Вы можете проверить, совпадают ли две строки, используя метод CompareTo () класса String. Этот метод вернет 0, если и только если две строки идентичны:
String strVowels = "AEIOU"; if (strVowels.compareTo ("AEIOU") == 0) { // Строки совпадают! (Этот код будет выполняться) } еще { // Строки не совпадают! }
Обратите внимание, что метод compareTo () чувствителен к регистру. Рассмотрите возможность преобразования обеих сторон вашего сравнения в один случай, прежде чем сравнивать их, если только вы специально не ищете один случай. Если вас не волнует регистр, вы также можете использовать метод compareToIgnoreCase () вместо метода compareTo ():
String strVowels = "AEIOU"; if (strVowels.compareToIgnoreCase ("aeiou") == 0) { // Строки совпадают! (Этот код будет выполняться) } еще { // Строки не совпадают! }
Простой поиск строк
Иногда вы хотите найти строку для символа или подстроки. Существует много других способов сопоставления строк и поиска, позволяющих создавать любые методы поиска, которые вы пожелаете. Вы также можете искать определенные символы или подстроки, используя методы indexOf () и lastIndexOf (), проверять, начинается или заканчивается ли строка подстрокой, используя методы beginWith () и endWith (). Наконец, метод match () поддерживает сопоставление с регулярным выражением.
Здесь мы используем метод contains (), чтобы определить, существует ли конкретная подстрока:
если (strVowels.contains ( "долговая расписка") == TRUE) { // Строка содержит подстроку IOU! }
Если вас не волнует регистр, используйте метод compareToIgnoreCase ():
String strVowels = "AEIOU"; if (strVowels. compareToIgnoreCase ("aeiou") == 0) { // Строки совпадают! (Этот код будет выполняться) } еще { // Строки не совпадают! }
СОВЕТ: При реализации функций сопоставления и поиска в ваших приложениях не забудьте выполнить какие-либо предварительные операции со строками, необходимые для исключения проблем с верхним / нижним / смешанным регистром перед поиском. Нормализация пользовательского ввода может быть выполнена как часть процесса проверки ввода, сохраняя ваш код как можно более простым и поддерживаемым.
Строки и другие типы данных
Объект String настолько важен для Java, что каждый класс, поскольку он является производным от корневого класса Object (java.lang.Object), имеет метод toString () для создания полезного строкового представления своего значения. Классы, которые не имеют разумного строкового представления, обычно возвращают некоторый идентификатор или отладочную информацию относительно типа класса. Те, которые имеют приемлемое строковое представление, такое как числовая строка из объекта Integer, возвращают текстовое представление инкапсулированного числа. При объединении со строкой, например, с оператором плюс (+), описанным выше, результаты метода toString () используются по умолчанию. Например:
Integer iNum = new Integer (123); String sText = "Число один-два-три ="; String sFullText = sText + iNum; String sFullText2 = sText + iNum.toString ();
Обе строки (sFullText и sFullText2) имеют одинаковое значение: «Число один-два-три = 123». Многие такие объекты также могут работать в обратном порядке. То есть они могут анализировать представление String и преобразовывать его в собственный тип, который представляет объект. Для instace, снова с классом Integer, метод parseInt () может использоваться для получения нового объекта Integer на основе строкового представления.
Струны и Производительность
Как вы видели, строки могут быть использованы с большим эффектом. Однако создание строк и манипуляции с ними имеют некоторые недостатки. Неосторожные манипуляции со строками могут иметь негативные последствия для производительности вашего приложения. Это базовый принцип проектирования Java — не создавать ненужные объекты. Вы можете видеть, что манипулирование строками и их модификации могут привести к множеству переменных String. Вот несколько советов по правильному использованию строк:
- Не создавайте строковые переменные, которые вам не нужны, особенно временные.
- Используйте классы StringBuilder и StringBuffer для генерации содержимого строки с нуля.
- Ознакомьтесь с предложениями по производительности, доступными на веб-сайте Android Developer .
- Используйте статические конечные строковые константы для строковых значений, известных во время компиляции.
Завершение
Строки — это важный тип данных, который разработчики Android используют для хранения текстовых данных. Строковые данные, будь то последовательность символов, чисел, символов или их сочетание, могут храниться различными способами, но класс String является основным служебным классом, используемым для этой цели. Класс String и его вспомогательные классы, такие как StringBuilder, содержат надежный набор методов для использования со строками, которые позволяют искать или изменять их содержимое.
Об авторах
Разработчики мобильных приложений Лорен Дарси и Шейн Кондер являются соавторами нескольких книг по разработке Android: углубленная книга по программированию под названием « Разработка беспроводных приложений для Android» и « Разработка Android-приложений Sams TeachYourself за 24 часа» . Когда они не пишут, они тратят свое время на разработку мобильного программного обеспечения в своей компании и оказание консультационных услуг. С ними можно связаться по электронной почте [email protected] , через их блог на androidbook.blogspot.com и в Twitter @androidwireless .