Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Леднева_программирование_на_JAVA.doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
11 Мб
Скачать
☆

Содержание отчета

Готовится один отчет на бригаду согласно заданному варианту в печатном виде. Он должен содержать следующие разделы:

  • титульный лист;

  • задание;

  • словесное описание алгоритма;

  • текст программы на языке Java.

Контрольные вопросы

1. В каких задачах используются эталонные строки?

2. Как подсчитать общее количество эталонных символов в тексте?

3. Как подсчитать количество вхождений каждого эталонного символа в текст?

4. Как определить наиболее частый или редкий эталонный символ в тексте?

5. Как сравнить длины слов в предложении?

6. Как определить первую (последнюю) букву в слове или предложении?

7. Какие средства используются для исправления ошибок в тексте?

Лабораторная работа № 11 разработка алгоритмов и программ с использованием классов StringBuffer/StringBuilder

Цель работы – получение навыков работы со строками классов StringBuffer и StringBuilder.

Источники: [3, с. 181-183].

Краткая теория Создание и обработка объектов классов stringbuffer и stringbuilder

Классы StringBuffer и StringBuilder являются «близнецами» и по своему предназначению близки к классу String, но, в отличие от последнего, содержимое и размеры объектов классов StringBuilder и StringBuffer можно изменять. Основным и единственным отличием StringBuilder от StringBuffer является потокобезопасность последнего и, следовательно, он более быстрый в обработке. Для решения задач лабораторного практикума это не имеет значения. Далее будут рассмотрены примеры с использованием обоих классов.

Примеры создания строк с помощью основных конструкторов:

StringBuffer sb1 = new StringBuffer();

StringBuffer sb2 = new StringBuffer(str); // str – переменная типа String

StringBuffer sb3 = new StringBuffer(20); // 20 – размер буфера

Видно, что конструктор класса StringBuffer может принимать в качестве параметра объект String или неотрицательный размер буфера.

Объекты классов StringBuffer и StringBuilder можно преобразовать в объект класса String методом toString() или с помощью конструктора класса String.

В классах присутствуют методы, аналогичные методам класса String, такие как replace(), substring(), charAt(), length(), getChars(), indexOf() и др., а также собственные методы, часть из них представлена в табл. 11.1.

Т аблица 11.1

Название метода

Тип

возвращаемого

значения

Выполняемые действия

Пример

append(String s)

StringBuffer

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

sb2=sb1.append(" Java");

s.append(" Java");

insert(int index, String s)

insert(int index, Char ch)

StringBuffer

Вставка символа, объекта или строки в указанную позицию

String ss="--или--";

sb.insert(2,ss); // начиная с 3-го символа вставлена подстрока

deleteCharAt(int index)

StringBuffer

Удаление символа

sb.deleteCharAt(1); // удален 2-й символ строки sb

delete(int start, int n)

StringBuffer

Удаление подстроки

sb.delete(0, 4); // начиная c 0-го символа удалены 4символа

setCharAt(int index, char ch)

StringBuffer

Замена символа в указанной позиции на другой

sb.setCharAt(0, 'k'); // заменен 0-й символ строки на ‘k’

reverse()

StringBuffer

Обращение содержимого объекта

sb= sb.reverse()

setLength(int n)

void

Установка размера буфера

sb.setLength(20);

capacity()

int

Возвращение текущего размера буфера

int n=s.capacity();

toString

String

Преобразование строки типа StringBuffer к строке типа String

StringBuffer sb;

sb = new StringBuffer(“Ура!”);

String s=sb.toString();

Использование методов класса StringBuffer продемонстрировано на следующих примерах.

Пример 11.1. Свойства объекта StringBuffer

package primer11_1;

public class DemoStringBuffer {

public static void main(String[] args) {

StringBuffer sb = new StringBuffer();

System.out.println("длина ->" + sb.length());

System.out.println("размер ->" + sb.capacity());

// sb = "Java"; // ошибка; так можно только для класса String

sb.append("Java");

System.out.println("строка ->" + sb);

System.out.println("длина ->" + sb.length());

System.out.println("размер ->" + sb.capacity());

System.out.println("реверс ->" + sb.reverse());

} }

Результатом выполнения данного кода будет:

длина ->0

размер ->16

строка ->Java

длина ->4

размер ->16

реверс ->avaJ

При создании объекта StringBuffer конструктор по умолчанию автоматически резервирует некоторый объем памяти (16 символов), что в дальнейшем позволяет быстро менять содержимое объекта, оставаясь в границах участка памяти, выделенного под объект. Размер резервируемой памяти при необходимости можно указывать в конструкторе. Если длина строки StringBuffer после изменения превышает его размер, то ёмкость объекта автоматически увеличивается, оставляя при этом резерв для дальнейших изменений. С помощью метода reverse() можно быстро изменить порядок символов в объекте.

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

Пример 11.2. Изменение объекта StringBuffer

package primer11_2;

public class NewStringBuffer {

public static void main(String[] args) {

StringBuffer str = new StringBuffer("Microsoft ");

s.append(" Word");

System.out.println(str);

}}

В результате выполнения этого кода будет выведена строка:

Microsoft Word

Для класса StringBuffer не переопределен метод equals(), т.е. сравнить содержимое двух объектов невозможно.

Пример 11.3. Сравнение объектов StringBuffer

package primer3;

public class EqualsStringBuffer {

public static void main(String[] args) {

StringBuffer sb1 = new StringBuffer("Sun");

StringBuffer sb2 = new StringBuffer("Sun");

System.out.print(sb1.equals(sb2));

} }

Результатом выполнения данной программы будет значение false.

Задача 11.1. Ввести в ЭВМ предложение, в котором слова могут быть разделены одним или несколькими пробелами. Выделить слова и вывести их на экран. Использовать класс StringBuilder.

В этом случае особенностью является то, что номер слова необходимо менять при встрече только с первым пробелом, а все последующие пробелы – пропускать.

Алгоритм:

1.1. Ввести предложение prStr (класс String);

1.2. Удалить пробелы в начале и в конце строки

1.3. Создать предложение StringBuilder prSb на основе prStr

1.4. Объявить массив строк StringBuilder // например: // StringBuilder []slovo=new StringBuilder[m];

2.1. Задать начальный номер слова k =0; // начальное значение

2.2. Создать объект слова k-того // например: // slovo[k] =new StringBuilder();

2.3. Задать начальный номер буквы предложения i=0;

2.4. Пока i < длины предложения prSb повторять

2.4.1. Если буква i-тая предложения != пробелу, то

а) к слову k-тому добавляется буква i-тая предложения;

б) переход к следующему символу i++

Иначе

а) номер слова увеличить k++

б) Создать слово k-тое // slovo[k]=new StringBuilder();

в) Пока (i < длины предложения) и (буква i-тая предложения = пробелу выполнять

пропускать символы i++;

3. Переписать массив слов StringBuilder в другой массив класса String с количеством элементов k.

4.1. Для i от 0 до номера последнего слова (k-того) выполнять

вывести слово i-тое нового массива слов типа String.

5. Закончить.