package kata.wordwrap.a20110716; /** * Word Wrap Kata. * Copyright (c) 2011, Peter Kofler, licensed under BSD License. */ public class WordWrapLoopOpt { private static final char BLANK = ' '; private static final char NEWLINE = '\n'; public static String wrap(String line, int maxLineLen) { StringBuilder accumulator = new StringBuilder(); int pos = 0; // optimize away string substringing of remaining part while (pos + maxLineLen < line.length()) { final int indexOfBlank = line.lastIndexOf(BLANK, pos + maxLineLen); final int split; final int offset; if (indexOfBlank > pos - 1) { split = indexOfBlank; offset = 1; } else { split = pos + maxLineLen; offset = 0; } accumulator.append(line.substring(pos, split)); accumulator.append(NEWLINE); pos = split + offset; } accumulator.append(line.substring(pos)); return accumulator.toString(); } /* * Like loop solution, but * n+1 Strings are created * 1 StringBuilders are created * -> half objects created */ }