package ru.chedmitriy.abusesDropping;

import java.io.*;

/**
 * Created by dimsan on 30.12.2016.
 */
public class Abuse {
/**.
 * Класс StringBuilder
 * позволяет изменять
 * строку,не создавая при этом новой строки,
 * в отличии от String, где любое изменение строки приводит
 * к созданию новой строки со значением измененной старой строки.
 * При этом старая строка остается висеть в памяти,пока ее не уберет
 * уборщик мусора.
 * В данном примере выбар пал на StringBuilder ввиду
 * множественных конкатинаций строк
 * */
    public StringBuilder stringBuilder = new StringBuilder();

    public StringBuilder getStringBuilder() {
        return stringBuilder;
    }

    public void setStringBuilder(StringBuilder stringBuilder) {
        this.stringBuilder = stringBuilder;
    }

    /**.
     * 'c' - символьная переменная
     * значение ее принимается как приведенное
     * целочисленное значение
     * */
    char c;
    /**.
     * параметр 't' - принимает
     * входящий поток*/
    int t;
    /**
     * .
     * PATH - путь к
     * конкретному файлу
     * 'numbers.txt'
     * в папке resources
     */
    public final String PATH = "chapter_003/src/main/resources/abuses.txt";
    /**
     * .
     * PATHOUT - путь
     * в место сохранения файла
     *
     */
    public final String PATHOUT = "chapter_003/src/main/resources/abusesOut.txt";

    /**
     * .
     * Метод 'dropAbuse'- удаляет из
     * открытого файла слова,определенные
     * массивом abuses
     * и записывает полученные значения в
     * новый файл.
     * @param in - входной поток - исходный файл
     * @param out - выходной поток - конечный файл
     * @param abuse - массив слов,которые необходимо
     *               убрать из исходного файла.
     */
    public void dropAbuses(InputStream in, OutputStream out, String[] abuse)throws IOException {
        try (InputStreamReader inputStreamReader = new  InputStreamReader(in);
             OutputStreamWriter outputWriter = new OutputStreamWriter((out))) {
            while ((t = inputStreamReader.read()) !=-1) {
                c = (char) t;
                stringBuilder.append(c);
                for (String ab : abuse) {
                    int start = stringBuilder.indexOf(ab);
                    if (start != -1) {
                        stringBuilder.delete(start, start + ab.length());
                    }

                }

            }
            outputWriter.write(stringBuilder.toString());
        }

    }

    public static void main(String[] args) throws IOException {
        String  abuse[] = {"two", "four", "five", "eight", "ten","seven"};
        Abuse ab = new Abuse();
        InputStream in = new FileInputStream(new File(ab.PATH));
        OutputStream out = new FileOutputStream(new File(ab.PATHOUT));
        ab.dropAbuses(in,out,abuse);
        System.out.println(ab.stringBuilder);
    }
}

@@ -587,206 +587,8 @@
 );%0A%0A
-    public StringBuilder getStringBuilder() %7B%0A        return stringBuilder;%0A    %7D%0A%0A    public void setStringBuilder(StringBuilder stringBuilder) %7B%0A        this.stringBuilder = stringBuilder;%0A    %7D%0A%0A
     
@@ -2166,33 +2166,32 @@
               %7D%0A
-%0A
                 
@@ -2279,410 +2279,15 @@
   %7D%0A
-%0A
     %7D%0A
-%0A
   
-  public static void main(String%5B%5D args) throws IOException %7B%0A        String  abuse%5B%5D = %7B%22two%22, %22four%22, %22five%22, %22eight%22, %22ten%22,%22seven%22%7D;%0A        Abuse ab = new Abuse();%0A        InputStream in = new FileInputStream(new File(ab.PATH));%0A        OutputStream out = new FileOutputStream(new File(ab.PATHOUT));%0A        ab.dropAbuses(in,out,abuse);%0A        System.out.println(ab.stringBuilder);%0A    %7D
 %0A%7D%0A

Update Abuse.java