Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Языки программирования -> Бишоп Д. -> "Эффективная робота Java 2" -> 106

Эффективная робота Java 2 - Бишоп Д.

Бишоп Д. Эффективная робота Java 2 — Спб.: Питер, 2002. — 592 c.
ISBN 966-552-107-1
Скачать (прямая ссылка): effektivnayarabotajava2002.djvu
Предыдущая << 1 .. 100 101 102 103 104 105 < 106 > 107 108 109 110 111 112 .. 259 >> Следующая

Задача. Согласно правилам оформления в абзацах не рекомендуется употреблять двойные пробелы. Перед нами стоит задача обработать предложенный текст и заменить двойные пробелы одинарными,
Решение. Для поиска двойных пробелов мы воспользуемся строковым методом indexOf. Содержимое файла будет считано по одной строке за один проход.
Алгоритм. Алгоритмы обработки строк могут быть довольно мудреными. Настоящий лучше применять поэтапно. Давайте начнем с того, что считаем одну строку текста и выведем ее вместе с указанием позиции первого обнаруженного двойного пробела. Если исходить из того, что fin — это класс BufferedReader, фрагмент программы на Java будет выглядеть так:
s = fin.readLineО;
System.out,println {з .in&exOf (я ",s) + " ** + s);
Если включить этот фрагмент в программу для обработки целого файла, полученный результат может быть таким:
О Алгоритмы обработки строк ногут быть довольно нудрешни. Настоящий
I
25 лучше применять поэтапно. Давайте начнем с того, что считаем -1 одну строку текста к выведем ее вместе с указанием
47 позиции первого обнаруженного двойного пробела. Если исходить из того, что 15 fin — это класс BufCeredReader, фрагмент программы на Java будет выглядеть
4 таж:
Как мы видим, в первой строке двойной пробел расположен в самом начале-Вторая, четвертая и пятая строки имеют двойные пробелы в средине. Третья строка не содержит двойного пробела, поэтому метод indexOf возвращает —I. Наконец, в последней строке двойной пробел находится в самом конце — после двоеточия.
Для нахождения более одного двойного пробела в строке необходимо создать цикл, который начинает проверку с позиции обнаруженного двойного пробела плюс 2 символа. Общий цикл выглядит следующим образом:
startingFrom - 0; while (true) {
spaceAt = s.indexOf(“ ",startingFrom);
if (spaceAt==;-l) break; s = s_substring(Q,spaceAt)+" "
Удаление двойных пробелов
236
Главо 7, Форматирование
+¦ s,substring(spaceAt+2,з . length<))? s tar ting Froru - spaceAt+2;
>
System.out.println(5);
Другими словами, мы воссоздаем строку s каждый раз с позиции 0 до двойного пробела плюс одинарный пробел и оставшаяся часть строки* Признаком того, что обработка строки завершена, послужит значение —1, возвращенное методом indexOf.
Программа, Полная версия программы включает приведенные части, а также выполняет проверку файла до хонда, Это достигается путем поиска строки нулевой длины. С целью тестирования программа настраивается на ввод данных с клавиатуры, но поток fin с помощью метода Filter,open может быть легко перенаправлен в файл по выбору пользователя.
import java.io.*; import javagently.*;
class Spaces {
/* Программа для удаления двойных пробелов. Дж.М, Єишоп, декабрь 1997 г.
Java 1.1
*
* Заменяет двойные пробелы одинарными.
* Иллюстрирует использование методов обработки строк, ?
V
static int count; public static void main [String args []) throws IOException (
System,out.printf"Программа замены двойных пробелов ") ;
System.out/println("одинарными,");
Stream fin = new Stream(System,in);
count - 0;
String S =
int spaceAt, startingfrom; try {
while {++count <5) {
System.out.printin("Ввeдите предложениєи); s - fin*readLine(};
if (s—null) throw new EOFException С);
startingFrom - 0; while (true) 1
spaceAt - s.indexOf(" ”,startingfrom);
if і spaceAt—-!) break; else if (spaceAt==0)
s = s.substring(1,s.length()); else s = s,substring(0r spaceAt)+" "
+ s,substring(spaceAt+2ts.length()); startingFrom = spaceAt+2;
}
System.out-println(s);
)
}
catch (EOFException e) {}
J
J
Строки и их обработхо
237
Тестирование. Следующие простые строки охватывают многие из тех случаев, которые представляют для нас интерес с точки зрения обнаружения программой.
Программа, для замены двойных пробелов одинарными.
Введите предложение
Строка один с одним двойным пробелом.
Строка оДИК с одним двойным пробелом.
Введите предложение Строка два с двумя.
Строка два с двумя.
Ввелите предложение
Строка три, заканчивающаяся двойным пробелом.
Строка три, зисан^иаіщаяся. д»ойвим пробелом.
Введите лредлоящние
Строка четыре, начинающаяся с двойного пробела.
Строка чеэтр«, натавожщаяся с двойного пробела.
Вредите пре дл ожение
Строка пять содержим тройной пробел.
Строка пять содержит тройкой пробел.
Способы усовершенствования рассмотренной программы описаны в приложении к данной главе.
Класс StringBuffer
Как указывалось, строки являются неизменными. Изменить длину или содержимое строки можно за счет разделения ее на части и их объединения требуемым способом (см. пример 7.1), Класс StringBuffer предоставляет методы append, insert и set-charAt, которые являются эффективными средствами изменения строк.
Предыдущая << 1 .. 100 101 102 103 104 105 < 106 > 107 108 109 110 111 112 .. 259 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.