Глава 5
Задача 5.3 "Комментарии."
В файле хранится некоторый текст. Он разбит на параграфы, которые разделены пустыми строками. Напишите программу, которая считывает текст, а затем выводит его, игнорируя фрагменты в фигурных скобках. Следует обеспечить вывод предупреждений в следующих случаях:
- внутри фигурных скобок обнаружена еще одна скобка.
- обнаружена закрывающая скобка без соответствующей ей открывающей скобки.
- в параграфе отсутствует парная закрывающая скобка.
В конце каждого параграфа необходимо выводить статистику о том, какая доля текста (в процентах) приходится на комментарии в скобках (пробелы не учитываются). Подсказка: эта программа идеально подходит для проверки методов, предназначенных для работы с символами; при ее написании целесообразно использовать булевы переменные.
Пример вводимых данных:
Этот отрывок текста имеет такую же длину, как и следующий комментарий. (Этот комментарий имеет такую же длину как и предыдущий отрывок текста. Можете проверить.) Можете проверить. ( Для этого
Пример выхода программы:
Этот отрывок текста имеет такую же длину, как и следующий комментарий. Можете проверить. ( Для этого
Комментарии составляют 50% текста
*** Нет закрывающей скобки
Решение
Исходный текст, который мы хотим обработать может иметь следующий вид:
Будем считывать полинейно, присваивать переменной типа String, и затем проверять эту строковую переменную на наличие в ней фигурных скобок. Сделаем необходимые подсчеты, и выведем текст игнорируя текст в скобках. Посчитаем проценты.
Программа выдает всю необходимую информацию о скобках.
Код программы:
import java.io.*;
import javagently.*;
class Comments {
Comments() throws IOException {
Stream in = new Stream(System.in);
Stream fin = new Stream(System.in);
Stream fout= new Stream ("data.out",Stream.WRITE);
try {
fin = Filer.open("data.txt");
}
catch (FileNotFoundException e) {
System.out.println("Five tries up");
System.out.println("Connecting to keyboard by default");
}
String s;
char ch;
boolean b = true;
int n = 0;
int m = 0;
int j = 0;
int mas[] = new int[8];
for(int i=0;i < 8;i++)
mas[i] = 0;
// try read file
try {
for(;;){
s = fin.readLine();
if(s.length() == 0){
fout.println("\n Total chars " + (mas[1]+1));
fout.println(" Chars in parethesis " + (mas[2]+1));
n = (int)mas[2]*100/mas[1];
fout.println("Comments is " + n + "% of text");
m = (mas[3] - mas[4]);
if(m > 0 ){
fout.println("Not close parenthesis " + m);
}
if(m < 0 ){
fout.println("Not open parenthesis " + (-m));
}
if(mas[6] > 0)
fout.println(" Inside open parenthesis " + (mas[6]));
fout.println("\n");
for(int i=0;i < 8;i++)
mas[i] = 0;
continue;
}
for(int i=0;i < s.length();i++)
{
ch = s.charAt(i);
mas[1]++;
if(ch==' ')
mas[1]--;
if(ch == '{'){
mas[3]++;
mas[5]++;
b = false;
}
if(ch == '}'){
mas[4]++;
mas[5]--;
if(mas[5] > 0)
mas[6]++;
mas[5] = 0;
b = true;
continue;
}
if(b == false){
mas[2]++;
if(ch ==' ')
mas[2]--;
continue;
}
fout.print(ch);
}//end for2
}//end for
}
catch (EOFException e) {
System.out.println(" All data is reading ");
}
fin.close();
fout.close();
}//end constructor
public static void main (String[] args) throws IOException {
new Comments();
}
}
Результат :
Назад |
Начало урока |
Вверх |
Вперед
Содержание