Не понимаю в какой момент менять строку.
По механики понятно что нужно считать и потом уже пересобрать.
Просто мне кажутся все другие варианты более геморные
Мой вариант
Поменять Вывод
Засунуть в массив вывод
Преобразовать в строку
Разделить
Собирать новый массив добавляя рекламную строку
Выводим массив
Спасибо
package com.javarush.task.task19.task1927;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.util.ArrayList;
/*
Контекстная реклама
*/
public class Solution {
public static TestString testString = new TestString();
public static void main(String[] args) {
//запоминаем настоящий PrintStream в специальную переменную
PrintStream consoleStream = System.out;
//Создаем динамический массив
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
//создаем адаптер к классу PrintStream
PrintStream stream = new PrintStream(outputStream);
//Устанавливаем его как текущий System.out
System.setOut(stream);
//Вызываем функцию, которая ничего не знает о наших манипуляциях
testString.printSomething();
//Преобразовываем записанные в наш ByteArray данные в строку
String result = outputStream.toString();
String[] subStr;
String delimeter="\r\n";
subStr=result.split(delimeter);
ArrayList<String> oh = new ArrayList<>();
int x=1;
for (int i =0;i<subStr.length;i++)
{
oh.add(subStr[i]);
if (x%2==0) oh.add("JavaRush - курсы Java онлайн");
x++;
}
//Возвращаем все как было
System.setOut(consoleStream);
for (int i =0;i<oh.size();i++){
System.out.println(oh.get(i));
}
}
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");
}
}
}