Опубликован: 13.07.2012 | Доступ: свободный | Студентов: 460 / 8 | Оценка: 5.00 / 5.00 | Длительность: 18:06:00
Специальности: Программист
Лекция 6:

Шрифты и строки

< Лекция 5 || Лекция 6: 1234 || Лекция 7 >

Список строк (класс StringArray)

Для хранения массива строковых объектов в Juce имеется класс StringArray, который описывает список строк с расширенными возможностями манипулирования ими.

Класс поддерживает следующие операции работы со строками:

Доступ к строке по её индексу возможен с помощью оператора [], как к элементу обычного массива. Если индекс выходит за пределы массива, будет возвращена пустая строка. Кроме того, получить ссылку на одну из строк массива по её индексу позволяет метод класса String& StringArray::getReference(int index) throw().

Возвращение числа элементов списка (хранящихся строк) осуществляет метод int StringArray::size() const throw().

Добавление новых строк в конец списка. Производится функцией void StringArray::add(const String& stringToAdd). Кроме того, в конец списка можно добавить целый массив строк, другой объект класса StringArray, с помощью метода void StringArray::addArray(const StringArray& other, int startIndex = 0, int numElementsToAdd = -1), где other — первый элемент добавляемого строкового массива, с которого необходимо начинать вставку, а numElementsToAdd — максимальное число строк из добавляемого массива для вставки. Если значение параметра меньше нуля, то добавляются все элементы.

Вставка новых строк в произвольное место списка со смещением элементов массива. Функция void StringArray::insert(int index, const String& stringToAdd) вставляет строку stringToAdd в массив на место, заданное индексом index, поднимая другие элементы. Если значение индекса меньше нуля или превышает размер массива, то строка добавляется в конец списка.

Вставка новых строк в произвольное место списка с заменой элементов массива. Функция void StringArray::set(int index, const String& newString) вставляет строку newString в массив на место, заданное индексом index. При этом прежняя строка замещается новой. Если значение индекса меньше нуля функция не делает ничего, а если оно превышает размер массива, то строка добавляется в конец списка.

Поиск строк в массиве (по содержимому). Чаще бывает, что найти необходимую строку в массиве бывает нужно не по её индексу, а по тексту, в ней содержащемуся. В этом может помочь метод bool StringArray::contains(const String& stringToLookFor, bool ignoreCase = false) const. Также, как и раньше, второй параметр — флаг, следует ли при поиске строки stringToLookFor учитывать регистр.

Удаление строк. Удалить одну строку, находящуюся на позиции index, из списка можно с помощью функции void StringArray::remove(int index). Если индекс выходит за пределы массива, то функция ничего не делает. Поиск строки stringToRemove в массиве с последующим её удалением выполняет функция void StringArray::removeString(const String& stringToRemove, bool ignoreCase = false); второй её параметр — флаг, показывающий, следует ли игнорировать регистр.

Полезны также функции, позволяющие удалить все повторяющиеся строки, void StringArray::removeDuplicates(bool ignoreCase), и все пустые строки в массиве, void StringArray::removeEmptyStrings(bool removeWhiteSpaceStrings = true). Если последняя функция в качестве параметра принимает истину, то пустыми будут считаться также строки, заполненные только пробелами.

Кроме того, класс StringArray позволяет удалять сразу ряд строк. Для этого используется метод void StringArray::removeRange(int startIndex, int numberToRemove), где startIndexиндекс первой строки из ряда, подлежащего удалению, а numberToRemove — число удаляемых элементов.

Перемещение строк на новую позицию в массиве осуществляет метод void StringArray::move(int currentIndex, int newIndex) throw(). При вызове функции экземпляром класса StringArray происходит перемещение содержащейся в нём строки, находящейся на позиции currentIndex, на позицию newIndex.

Сортировка элементов списка осуществляется функцией void StringArray::sort(bool ignoreCase); параметр указывает, следует ли учитывать регистр. Строки сортируются в алфавитном порядке.

Очистка списка. Удаление всех строк из списка с обнулением его размера выполняет функция void StringArray::clear().

Нахождение индекса строки осуществляет функция int StringArray::indexOf(const String& stringToLookFor, bool ignoreCase = false, int startIndex = 0) const, где stringToLookFor — текст (строка) для поиска, ignoreCase— флаг, показывающий, следует ли игнорировать регистр, а startIndexиндекс элемента, с которого начинается поиск. Функция возвращает индекс найденной строки, а в случае, если ничего не было найдено, возвращается -1.

Объединение строк массива в одну. Удобно для автоматической генерации текста, добавляемого, скажем, в многострочное поле ввода на основании собранных и сохранённых в массиве StringArray данных. Осуществляется функцией const String StringArray::joinIntoString(const String& separatorString, int startIndex = 0, int numberOfElements = -1) const.

Мы можем с помощью параметра separatorString задать строку-разделитель, которая будет разделять элементы массива в результирующей строке. Например, если массив StringArray включал строки "a", "b" и "c", то вызов метода joinIntoString(",") вернёт строку "a,b,c".

startIndex, как нетрудно догадаться, индекс элемента массива, с которого следует начать объединение, а numberOfElements — число объединяемых строк. В том случае, если последний параметр принимает значение меньше нуля, то будут объединены все строки массива.

Краткие итоги

Для вывода неформатированного текста в Juce используется класс String, а форматированного — также и класс Font, хранящий информацию о параметрах шрифта текста.

Класс String, инкапсулирует действия со строками. Объект класса String — это строка, состоящая из произвольного числа символов. Литерные константы типа String представляют собой последовательности символов, заключённые в двойные кавычки.

Дополнительные материалы

Архив с исходными текстами примера Вы можете скачать здесь

< Лекция 5 || Лекция 6: 1234 || Лекция 7 >