Проблемный запрос к серверу с помощью эмулятора genymotion

Вот простая чистая реализация, которая согласуется с Pattern#split и работает с шаблонами переменной длины, которые выглядят не могут, и это проще в использовании. Это похоже на решение , предоставленное @cletus.

public static String[] split(CharSequence input, String pattern) {
    return split(input, Pattern.compile(pattern));
}

public static String[] split(CharSequence input, Pattern pattern) {
    Matcher matcher = pattern.matcher(input);
    int start = 0;
    List result = new ArrayList<>();
    while (matcher.find()) {
        result.add(input.subSequence(start, matcher.start()).toString());
        result.add(matcher.group());
        start = matcher.end();
    }
    if (start != input.length()) result.add(input.subSequence(start, input.length()).toString());
    return result.toArray(new String[0]);
}

Я не делаю здесь нулевые проверки, Pattern#split не делает, почему я должен. 't нравится if в конце, но требуется для согласованности с Pattern#split. В противном случае я бы безоговорочно добавлял, в результате чего в качестве последнего элемента результата была бы пустая строка, если строка ввода заканчивается шаблоном.

Я конвертирую в String [] для согласованности с Pattern#split, я использую new String[0], а не new String[result.size()], см. здесь здесь .

Вот мои тесты:

@Test
public void splitsVariableLengthPattern() {
    String[] result = Split.split("/foo/$bar/bas", "\\$\\w+");
    Assert.assertArrayEquals(new String[] { "/foo/", "$bar", "/bas" }, result);
}

@Test
public void splitsEndingWithPattern() {
    String[] result = Split.split("/foo/$bar", "\\$\\w+");
    Assert.assertArrayEquals(new String[] { "/foo/", "$bar" }, result);
}

@Test
public void splitsStartingWithPattern() {
    String[] result = Split.split("$foo/bar", "\\$\\w+");
    Assert.assertArrayEquals(new String[] { "", "$foo", "/bar" }, result);
}

@Test
public void splitsNoMatchesPattern() {
    String[] result = Split.split("/foo/bar", "\\$\\w+");
    Assert.assertArrayEquals(new String[] { "/foo/bar" }, result);
}

0
задан Poli 18 January 2019 в 13:05
поделиться