//Создаём переменную PrintStream чтоб потом (после наших изменией out) всё работало как прежде т.е. System.out.print PrintStream consoleStream = System.out; // Создаём массив куда будут складировыаться данные отпраленные в System.out.print ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); //Создаём поток который направит данные в массив PrintStream stream = new PrintStream(outputStream); //Подменяем стандартный System.out наш (с потоком в массив) System.Out.(Stream) System.setOut(stream); //Вызываем функцию, в которой будет использоваться новый System.out.print printSomething(); //Преобразовываем данные которые в массиве в строку String result = outputStream.toString(); // теперь с помощью переменной consoleStream возравщаем как было в начале т.е. масскируем новую System.out.print под старую (стандартную) System.setOut(consoleStream); //Здесь проводим операцию со строкой StringBuilder stringBuilder = new StringBuilder(result); stringBuilder.reverse(); String reverseString = stringBuilder.toString(); //результат нашей операции со строкой помещаем в новый созданный нами System.out.print System.out.println(reverseString);