Главная » Java » Строки и массивы значений char Java

0

Содержимое объекта String может быть отображено с помощью массива элементов типа char и наоборот. Достаточно часто возникает задача построения массива значений char, а на его основе – объекта типа String. В тех ситуациях, когда применение объектов класса StringBuffer (обратитесь к разделу 9.8 на странице 237), допускающих изменение строковых данных, нецелесообразно или неудобно, можно обратиться к нескольким методам и конструкторам класса Stri ng, помогающим преобразовать объект типа String в массив значений char либо, наоборот, массив char – в объект String.

Существуют два конструктора, позволяющих создавать объекты String на основе массивов значений char.

public String(char[] chars, int start, int count)

Создает новый объект String, содержимое которого соответствует части последовательности элементов массива chars, берущей начало с элемента под номером start и содержащей не больше count символов.

public String(char[] chars)

Конструктор аналогичен предыдущему при условии String ( chars, 0 , chars.length).

оба конструктора предусматривают копирование передаваемого массива, так что, создав объект String, вы вправе изменить положенный в его основу Массив, не рискуя исказить содержимое объекта String.

следующий простой пример демонстрирует способ удаления из строки всех экземпляров определенного символа:

public static String squeezeOut(string from, char toss) {

char[] chars = from.toCharArray();

int len = chars.length;

int put = о;

for (int i = о; i < len; i++)

if (chars[i] != toss) chars[put++] = chars[i]; return new String(chars, О, put);

}

Метод squeezeOut осуществляет преобразование содержимого строки-параметра from в массив chars типа char с помощью метода toCharArray. Далее вычисляется длина исходного массива и инициализируется переменная put, предназначенная для хранения значения позиции, свободной для присваивания очередного пере носимого символа. Внутри цикла очередной символ сравнивается с образцом и при отрицательном результате пере носится на позицию, задаваемую величиной put. По завершении цикла метод возвращает новую строку, созданную на основании массива, из которого удалены все экземпляры символа-образца.

При необходимости вместо конструкторов можно воспользоваться одним из двух соответствующих статических методов Stгing.copyValueOf. Например, последнюю инструкцию метода squeezeOut легко переписать следующим образом:

return String.copyvalueOf(chars, О, put);

Вторая версия метода String. copyvalueOf предусматривает задание одного параметра и преобразует в String массив значений char целиком.

Метод toCharArray достаточно прост и способен удовлетворить почти любые Потребности. Если нужны более изощренные средства управления переносом фрагментов строки в массив символов, можно обратиться к методу getChars, Описанному Ниже.

public void getChars(int srcBegin, int srcEnd, char[] dst,

int dstBegin)

Копирует символы из фрагмента текущей строки, заданного значениями начальной (srcBegin) и конечной (srcEnd) позиций, в указанный массив dst значений char, начиная с элемента dst[dstBegi n]. Элемент Исходной строки с индексом, равным srcEnd, не копируется.

Источник: Арнолд, Кен, Гослинг, Джеймс, Холмс, Дэвид. Язык программирования Java. 3-е изд .. : Пер. с англ. – М. : Издательский дом «Вильяме», 2001. – 624 с. : ил. – Парал. тит. англ.

По теме:

  • Комментарии