Подтвердить что ты не робот

String.split() * not * на регулярном выражении?

Так как String.split() работает с регулярными выражениями, этот фрагмент:

String s = "str?str?argh";
s.split("r?");

... дает: [, s, t, , ?, s, t, , ?, a, , g, h]

Какой самый элегантный способ разбивать эту строку на последовательность r? так, чтобы она создавала [st, st, argh]?

EDIT. Я знаю, что я могу избежать проблемного ?. Проблема в том, что я не знаю разделителя, и я не чувствую, что работаю над этим, написав функцию escapeGenericRegex().

4b9b3361

Ответ 1

Общее решение, использующее только API Java SE:

String separator = ...
s.split(Pattern.quote(separator));

Ответ 2

Вы можете использовать

StringUtils.split("?r")

из commons-lang.

Ответ 3

Сбегите ?:

s.split("r\\?");

Ответ 4

String[] strs = str.split(Pattern.quote("r?"));

Ответ 5

Это прекрасно работает:

public static List<String> splitNonRegex(String input, String delim)
{
    List<String> l = new ArrayList<String>();
    int offset = 0;

    while (true)
    {
        int index = input.indexOf(delim, offset);
        if (index == -1)
        {
            l.add(input.substring(offset));
            return l;
        } else
        {
            l.add(input.substring(offset, index));
            offset = (index + delim.length());
        }
    }
}

Ответ 7

попробовать

String s = "str?str?argh";
s.split("r\?");