Разделение строки в кавычках («) работает не так, как ожидалось

#java #arrays #string #escaping

#java #массивы #строка #экранирование

Вопрос:

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

Регулярное выражение является частью моего кода, поэтому я не могу удалить все регулярное выражение, что я могу сделать, так это расширить его

  String  lines = "70001223,fjdhsd,jahd",37874,dfhjkd,jadhj";

         String columns [] = lines.split(",(?=(?:[^"]*"[^"]*")*[^"]*$)", -1);


         for(int i = 0; i < columns.length; i  ){
             System.out.println(columns[i]);
         }

70001223,fjdhsd,**jahd"**
37874
dfhjkd
jadhj
  

это фактический результат, но я хочу, чтобы фактический результат был

 70001223,
fjdhsd,
**jahd"**
37874
dfhjkd
jadhj
  

посмотрите, какая разница, что кавычки («) вызывают проблему.

Комментарии:

1. Почему бы просто не использовать: String columns[] = lines.split(","); ?

2. @NicholasK по его словам, в его строках есть «» кавычки, и, следовательно, он не может использовать split напрямую, как указано вами.

3. Какое отношение разделение запятой имеет к кавычкам в строке? И почему первые два токена содержат запятую, а остальные нет?

4. примерные данные не самые лучшие, но я также не вижу, какое значение имеют двойные кавычки; ни то, как вы ожидаете получить это **jahd"** , чего я не могу найти во входных данных. И как вы можете изменить регулярное выражение, но не уменьшить его???

5.почему кавычки не допускают разделения? это просто то выражение, которое не работает с нечетным числом кавычек или? с var text="abc,"', -"; text.split(",") возвратами String[3] { "abc", ""'", " -" } — или используя ваш пример: String[6] { "70001223", "fjdhsd", "jahd"", "37874", "dfhjkd", "jadhj" } — может быть, вы могли бы отредактировать вопрос, чтобы лучше объяснить

Ответ №1:

Не совсем понял вывод, например, в некоторых строках была запятая, а *** отображался в исходной строке.

Может быть, что-то вроде этого?

регулярное выражение открытого класса {

 public static void main(String[] args) {
    String  lines = "70001223,fjdhsd,***jahd***",37874,dfhjkd,jadhj";
    String  newLine = lines.replace(""", "");

    String[] columns = newLine.split(",");

    for (String column : columns) System.out.println(column);
}
  

}