package com.javarush.test.level19.lesson10.home09;
/* Контекстная реклама
В методе main подмените объект System.out написанной вами реадер-оберткой
Ваша реадер-обертка должна выводить на консоль контекстную рекламу после каждого второго println-а
Вызовите готовый метод printSomething(), воспользуйтесь testString
Верните переменной System.out первоначальный поток
Рекламный текст: "JavaRush - курсы Java онлайн"
Пример вывода:
first
second
JavaRush - курсы Java онлайн
third
fourth
JavaRush - курсы Java онлайн
fifth
*/
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
public class Solution {
public static TestString testString = new TestString();
public static void main(String[] args) {
PrintStream consoleStream = System.out; //сохраняем System.out в первоначальном виде в поток PrintStream
ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); //создаём динамический массив
System.setOut(new PrintStream(outputStream)); //меняем функционал System.out. теперь, когда будут попытки вызвать System.out, результат будет записан в outputStream; например, при вызове System.out.println("Hello!"); outputStream.toString = "Hello!", на экран ничего не выведется
testString.printSomething(); //перехват
String result = outputStream.toString(); //загоняем значение перехваченного System.out в строку
System.setOut(consoleStream); //заново учим System.out выводить текст на консоль
String string = addContext(result); //производим любые операции с перехваченной строкой. в нашем случае, перехватываются сразу все строки метода
System.out.println(string); //печатаем строку
}
private static String addContext(String result) {
StringBuilder builder = new StringBuilder();
int count = 0;
char[] ch = result.toCharArray();
for (char c : ch) {
builder.append(c);
if (c == 10) count++;
if (count == 2) {
builder.append("JavaRush - курсы Java онлайн\n");
count = 0;
}
}
result = builder.toString();
return result;
}
public static class TestString {
public void printSomething() {
System.out.println("first");
System.out.println("second");
System.out.println("third");
System.out.println("fourth");
System.out.println("fifth");
}
}
}
Leave A Comment