import java.util.ArrayList; import java.util.Iterator; public class TextOutput { private boolean formatRaw; private int columnWidth = 10; /** * Method which checks in which way the paragraphs should be displayed. And then * * @param text the ArrayList which is then formated into the desired output. */ public void print(ArrayList text) { if (formatRaw) { printFormated(text); } else { printUnformatedV2(text); } } /** * Method to print out the paragraphs in numerical order and with the whole paragraph as its length. * * @param text the ArrayList which is used for the output */ private void printFormated(ArrayList text) { for (int counter = 0; counter < text.size(); counter++) { System.out.println("<" + (counter + 1) + ">: <" + text.get(counter) + ">"); } } /** * Method to print out the paragraphs with the length taken from columnWidth and adding leftover words to the next * paragraph. * * @param text the ArrayList which is used for the output. */ private void printUnformated(ArrayList text) { for (String paragraph : text) { String[] words = paragraph.split(" "); int currentLength = 0; for (String word : words) { if (word.length() > columnWidth) { String[] letters = word.split(""); int letterLenght = letters.length; int lettersPrinted = 0; do { currentLength = 0; for (int i = 0; i < columnWidth; i++) { if (letterLenght > 0) { System.out.print(letters[lettersPrinted]); letterLenght--; lettersPrinted++; currentLength++; } } if (!(letterLenght == 0)) { System.out.println(); } } while (letterLenght >= columnWidth); } else { if (word.length() >= columnWidth - currentLength) { currentLength = 0; System.out.println(); } System.out.print(word + " "); currentLength += word.length() + 1; } } System.out.println(); //added } } private void printUnformatedV2(ArrayList text) { for(String paragraph : text) { if (paragraph.length() <= columnWidth) { System.out.println(paragraph); } else { String[] word = paragraph.split(" "); int currentLineLength = 0; for(String eachword : word) { if (eachword.length() > columnWidth) { String remainingText = eachword; do { if (remainingText.length() < columnWidth) { System.out.println(remainingText); break; } System.out.println(remainingText.substring(0, columnWidth)); remainingText = remainingText.substring((columnWidth)); } while (!(remainingText.length() == 0)); } else { if (currentLineLength == 0) { System.out.println(); } if (columnWidth > eachword.length()) { System.out.print(eachword); if (!(currentLineLength == columnWidth)) { System.out.print(" "); } currentLineLength = currentLineLength + eachword.length(); } else { System.out.println(eachword); currentLineLength = eachword.length(); if (!(currentLineLength == columnWidth)) { System.out.print(" "); } } } } } } } /** * Method which sets the Variable formatRaw to true. */ public void formatRaw() { formatRaw = true; } /** * Method to set the formatRaw to false and also set the length of the desired paragraph length in order to limit * the paragraph length when printing the text. * * @param length the maximum length of each paragraph that is allowed to be displayed when printing the text. */ public void formatFix(int length) { formatRaw = false; columnWidth = length; } /** * Method to give out the Error "Invalid String". */ public void errorInvalidString() { System.err.println("Invalid String"); } /** * Method to give out the Error "Invalid Command". */ public void errorInvalidCommand() { System.err.println("Invalid Command"); } }