package ch.unibe.scg.cc.lines; import java.io.Serializable; /** Factory for {@link StringOfLines}. */ public class StringOfLinesFactory implements Serializable { private static final long serialVersionUID = 1L; StringOfLinesFactory() {} // Prevent subclassing. /** @return a new instance. */ public static StringOfLinesFactory getInstance() { return new StringOfLinesFactory(); } /** @return string, split by separator. */ public StringOfLines make(String string, char separator) { String stringEndingInNewline = string; if (!string.endsWith(String.valueOf(separator))) { stringEndingInNewline = string + separator; } return makeSanitized(stringEndingInNewline, separator); } private StringOfLines makeSanitized(String string, char separator) { int count = countOccurrences(string, separator); int[] separators = new int[count + 1]; separators[0] = 0; int thisIndex = string.indexOf(separator); int i; for (i = 1; thisIndex != -1; thisIndex = string.indexOf(separator, thisIndex + 1)) { separators[i] = thisIndex; i++; } assert i == separators.length : "" + (separators.length) + " : " + i; return new StringOfLines(string, separators); } /** @return the number of occurrences of needle in haystack. */ public static int countOccurrences(String haystack, char needle) { // TODO: should not be public … int count = 0; for (int i = 0; i < haystack.length(); i++) { if (haystack.charAt(i) == needle) { count++; } } return count; } }