package org.simpleframework.xml.util; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; public class LineStripper { public static List<String> stripLines(InputStream text) throws IOException { ByteArrayOutputStream out = new ByteArrayOutputStream(); byte[] chunk = new byte[8192]; int count = 0; while ((count = text.read(chunk)) != -1) { out.write(chunk, 0, count); } text.close(); return stripLines(out.toString("UTF-8")); } public static List<String> stripLines(String text) { List<String> list = new ArrayList<String>(); char[] array = text.toCharArray(); int start = 0; while(start < array.length) { String line = nextLine(array, start); String trimLine = trimLine(line); list.add(trimLine); start += line.length(); } return list; } private static String trimLine(String line) { for(int i = line.length() - 1; i >= 0; i--) { if(!Character.isWhitespace(line.charAt(i))) { return line.substring(0, i + 1); } } return line; } private static String nextLine(char[] text, int startFrom) { /* for(int i = startFrom; i < text.length; i++) { if(text[i] == '\r' || text[i] == '\n') { while(i < text.length && (text[i] == '\r' || text[i] == '\n')) { i++; } return new String(text, startFrom, i - startFrom); } } */ for(int i = startFrom; i < text.length; i++) { if(text[i] == '\r') { if(i < text.length && text[i] == '\n') { i++; } return new String(text, startFrom, i - startFrom); } if(text[i] == '\n') { return new String(text, startFrom, ++i - startFrom); } } return new String(text, startFrom, text.length - startFrom); } }