Первое: String.split() использует регулярное выражение для поиска разделителей, а не подстрок.
Редактировать: Я не уверен, что это можно сделать с помощью String.split(). Я думаю, что единственный способ, которым вы могли бы справиться с кавычками, в то время как только совпадение с запятой было бы с помощью readahead и lookbehind, и это сильно сломается во многих случаях.
Edit2: Я уверен, что это можно сделать с помощью регулярного выражения. И я уверен, что этот один случай можно решить с помощью string.split() - но общее решение не будет простым.
В принципе, вы ищете что-либо, что не является запятой в качестве входных данных [^,], вы можете обрабатывать кавычки как отдельный символ. Я сам проделал большую часть работы. Я получаю это как вывод:
apple
boy
cat
dog
cat
time\" after\"noon
Но я не уверен, почему у него так много пустых строк.
Мой полный код:
String input = "apple,boy,cat,\"dog,cat\",\"time\\\" after\\\"noon\"";
Pattern pattern =
Pattern.compile("(\\s|[^,\"\\\\]|(\\\\.)||(\".*\"))*");
Matcher m = pattern.matcher(input);
while(m.find()){
System.out.println(m.group());
}
Но да, я эхо парень выше и сказать, что, если нет никакого требования, чтобы использовать регулярные выражения, то это, вероятно, проще сделать это вручную.
Но тогда я думаю, что я почти там. Это выплевывает ... о, эй, я вижу, что здесь происходит. Думаю, я могу это исправить.
Но я собираюсь повторить парня выше и сказать, что если нет требования использовать регулярное выражение, вероятно, лучше сделать это по одному символу за раз и реализовать логику вручную. Если ваше регулярное выражение не идеальное изображение, это может привести к возникновению всех видов непредсказуемой странности.
Зачем вам нужно использовать регулярное выражение? Вы можете заменить «\» пустым пространством после разделения на запятую? – 2013-03-02 21:41:49
Попробуйте изменить ваше регулярное выражение на «\\\» «это поможет немного, но не приведет вас к вашей конечной цели. – Scott
Регулярное выражение не может выполнить то, что вы пытаетесь сделать. Рассмотрим, что произойдет, если вы попытаетесь разобрать эту строку : «apple, boy», «C: \\», «dog, cat» «Вместо обычного выражения я рекомендую вам просто читать символы один за другим и обрабатывать обратную косую черту в вашем собственном коде. – VGR