package kata.wordwrap.a20110716; /** * Word Wrap Kata. * Copyright (c) 2011, Peter Kofler, licensed under BSD License. */ public class WordWrapTailRecursive { private static final char BLANK = ' '; private static final char NEWLINE = '\n'; public static String wrap(String line, int maxLineLen) { StringBuilder accumulator = new StringBuilder(); wrap(line, maxLineLen, accumulator); return accumulator.toString(); } private static void wrap(String remainingLine, int maxLineLen, StringBuilder accumulator) { if (remainingLine.length() <= maxLineLen) { accumulator.append(remainingLine); return; } final int indexOfBlank = remainingLine.lastIndexOf(BLANK, maxLineLen); final int split; final int offset; if (indexOfBlank > -1) { split = indexOfBlank; offset = 1; } else { split = maxLineLen; offset = 0; } accumulator.append(remainingLine.substring(0, split)); accumulator.append(NEWLINE); wrap(remainingLine.substring(split + offset), maxLineLen, accumulator); } }