Ответ 1
Общее решение, использующее только API Java SE:
String separator = ...
s.split(Pattern.quote(separator));
Так как String.split()
работает с регулярными выражениями, этот фрагмент:
String s = "str?str?argh";
s.split("r?");
... дает: [, s, t, , ?, s, t, , ?, a, , g, h]
Какой самый элегантный способ разбивать эту строку на последовательность r?
так, чтобы она создавала [st, st, argh]
?
EDIT. Я знаю, что я могу избежать проблемного ?
. Проблема в том, что я не знаю разделителя, и я не чувствую, что работаю над этим, написав функцию escapeGenericRegex()
.
Общее решение, использующее только API Java SE:
String separator = ...
s.split(Pattern.quote(separator));
Вы можете использовать
StringUtils.split("?r")
из commons-lang.
Сбегите ?
:
s.split("r\\?");
String[] strs = str.split(Pattern.quote("r?"));
Это прекрасно работает:
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());
}
}
}
Используйте Guava Splitter.
попробовать
String s = "str?str?argh";
s.split("r\?");