util: extract StringUtil.findStartingLineSeparator

This commit is contained in:
Sergey Simonchik
2016-08-31 18:05:32 +03:00
parent b06d96a490
commit b7f5ceba06
2 changed files with 39 additions and 4 deletions
@@ -3147,10 +3147,23 @@ public class StringUtil extends StringUtilRt {
public static LineSeparator detectSeparators(@NotNull CharSequence text) {
int index = indexOfAny(text, "\n\r");
if (index == -1) return null;
if (startsWith(text, index, "\r\n")) return LineSeparator.CRLF;
if (text.charAt(index) == '\r') return LineSeparator.CR;
if (text.charAt(index) == '\n') return LineSeparator.LF;
throw new IllegalStateException();
LineSeparator lineSeparator = findStartingLineSeparator(text, index);
if (lineSeparator == null) {
throw new AssertionError();
}
return lineSeparator;
}
@Nullable
public static LineSeparator findStartingLineSeparator(@NotNull CharSequence text, int startIndex) {
if (startIndex < 0 || startIndex >= text.length()) {
return null;
}
char ch = text.charAt(startIndex);
if (ch == '\r') {
return startIndex + 1 < text.length() && text.charAt(startIndex + 1) == '\n' ? LineSeparator.CRLF : LineSeparator.CR;
}
return ch == '\n' ? LineSeparator.LF : null;
}
@NotNull
@@ -373,6 +373,28 @@ public class StringUtilTest {
assertEquals(LineSeparator.CRLF, StringUtil.detectSeparators("asd\r\nads\n"));
}
@Test
public void testFindStartingLineSeparator() {
assertEquals(null, StringUtil.findStartingLineSeparator("", -1));
assertEquals(null, StringUtil.findStartingLineSeparator("", 0));
assertEquals(null, StringUtil.findStartingLineSeparator("", 1));
assertEquals(null, StringUtil.findStartingLineSeparator("\nHello", -1));
assertEquals(null, StringUtil.findStartingLineSeparator("\nHello", 1));
assertEquals(null, StringUtil.findStartingLineSeparator("\nH\rel\nlo", 6));
assertEquals(LineSeparator.LF, StringUtil.findStartingLineSeparator("\nHello", 0));
assertEquals(LineSeparator.LF, StringUtil.findStartingLineSeparator("\nH\rel\nlo", 5));
assertEquals(LineSeparator.LF, StringUtil.findStartingLineSeparator("Hello\n", 5));
assertEquals(LineSeparator.CR, StringUtil.findStartingLineSeparator("\rH\r\nello", 0));
assertEquals(LineSeparator.CR, StringUtil.findStartingLineSeparator("Hello\r", 5));
assertEquals(LineSeparator.CR, StringUtil.findStartingLineSeparator("Hello\b\r", 6));
assertEquals(LineSeparator.CRLF, StringUtil.findStartingLineSeparator("\rH\r\nello", 2));
assertEquals(LineSeparator.CRLF, StringUtil.findStartingLineSeparator("\r\nH\r\nello", 0));
assertEquals(LineSeparator.CRLF, StringUtil.findStartingLineSeparator("\r\nH\r\nello\r\n", 9));
}
@Test
public void testFormatFileSize() {
assertEquals("0B", StringUtil.formatFileSize(0));