2013-11-18 19 views
0

У меня есть строка, которая выглядит следующим образомУдалить двойные кавычки из строки

«Он сказал„“Что?» «»

Во всем файле, есть на самом деле больше линий, как, что , разделенных запятыми. Результат этой строки должен выглядеть примерно так:

Он сказал: «Что? !!»

Я пытаюсь сделать это с помощью этого метода:

Pattern pattern = Pattern.compile("\\s*(\"[^\"]*\"|[^,]*)\\s*"); 
      Matcher matcher = pattern.matcher(line); 
      while (matcher.find()) 
      { 
       System.out.println(matcher.group(1)); 
       lines.add(matcher.group(1)); //adds each line to an arraylist 
      } 

Однако выход я получаю это:

He said, 
What? 

Я уверен, что причина с моими регулярными выражениями, поскольку все это делает удаление всех двойных кавычек.

+0

ли 'lines' должен представлять отдельные строки? Если это так, то при вызове 'group()' он будет иметь отдельные результаты для каждой строки. – vandale

+0

Каковы ваши ожидаемые значения из этого матча? – anubhava

ответ

1

Почему бы просто не использовать Строка # replaceAll

line.replaceAll("\"", ""); 
+0

Мне все равно нужно разделить каждую строку на более мелкие сегменты и сохранить эти сегменты в arraylist. – Generalkidd

+0

Это удалит все двойные кавычки из ввода. – anubhava

+0

О, так что вы хотите, чтобы внешние двойные кавычки все еще остались нетронутыми? Возможно, я не понимаю ваш желаемый результат. –

1

Это потому, что регулярное выражение соответствует

"He said, " 

затем

"What?" 

затем

"" 

Кажется, что вы на самом деле хотите удалить на один уровень двойных кавычек. Чтобы сделать это, вам нужно использовать lookaround утверждения:

Pattern pattern = Pattern.compile("\\s*\"(?!\")[^\"]*(?<!\")\"\\s*"); 
+0

Я пробовал ваше регулярное выражение, но я получаю несколько ошибок. – Generalkidd

0

Процесс формирования кавычках является:

  1. побег (двойной) двойные кавычки в строке
  2. Surround результирующая строка с двойные кавычки

код ниже просто переворачивает этот процесс:

Это первый удаляет внешние двойные кавычки, то снимите экранирует внутренние двойные кавычки, а затем расщепляется:

public static void main(String[] args) { 
    String input = "\"He said, \"\"What?\"\"\""; 
    String[] out = input.replaceAll("^(\")|(\")$", "").replace("\"\"", "\"").split(", "); 
    for (String o : out) { 
     System.out.println(o); 
    } 
} 

Выход:

He said 
"What?" 
Смежные вопросы