Понимание регулярного выражения в Java: split (“\ t”) vs split (“\\ t”) – когда они оба работают, и когда они должны использоваться

Я недавно выяснил, что я не использовал регулярное выражение в моем коде. Учитывая пример строки с разделителями табуляции, я использовал str.split("\t") . Теперь я понимаю, что это неправильно, и чтобы правильно соответствовать вкладкам, я должен использовать str.split("\\t") .

Однако я случайно наткнулся на этот факт, так как я искал шаблоны регулярных выражений для чего-то другого. Вы видите, что сбой кода split("\t") работает в моем случае очень хорошо, и теперь я смущен тем, почему он работает, если это неправильный способ объявить регулярное выражение для соответствия символу табуляции. Следовательно, вопрос, ради реального понимания того, как regex обрабатывается в Java, вместо того, чтобы просто копировать код в Eclipse и не заботиться о том, почему он работает …

Аналогичным образом я столкнулся с текстом, который не только разделен на табу, но и разделен запятой. Более ясно, что таблицы с разделителями табуляции, которые я анализирую, иногда include «составные» элементы, которые выглядят как: item1,item2,item3 и я хотел бы проанализировать их как отдельные элементы, для простоты. В этом случае соответствующее выражение регулярного выражения должно быть: line.split("[\\t,]") , или я тоже ошибаюсь здесь?

Заранее спасибо,

При использовании "\t" escape-последовательность \t заменяется на Java символом U + 0009. При использовании "\\t" escape-последовательность \\ в \\t заменяется Java на \ , что приводит к \t которая затем интерпретируется парсером регулярных выражений как символ U + 0009.

Таким образом, обе записи будут интерпретироваться правильно. Это просто вопрос, когда он заменяется соответствующим символом.

\ считается escape-символом в java, поэтому для получения правильного регулярного выражения вам нужно выйти \ with \ и t, чтобы указать вкладку.

Этот урок поможет больше

  • Java String.split () иногда дает пустые строки
  • Как именно метод String.split () в Java работает при регулярном выражении?
  • Как сохранить разделители Regex.Split?
  • Разделение слов на буквы в Java
  • Разделение строки на каждый n-й символ
  • Разделить регулярное выражение для извлечения строк непрерывных символов
  • Разделить разделенные запятыми строки в столбце на отдельные строки
  • Сплит время
  • Разделить объекты NSData на другие объекты NSData заданного размера
  • Почему в Java 8 split иногда удаляет пустые строки при начале массива результатов?
  • Сканер против StringTokenizer против String.Split
  • Interesting Posts

    MEF (Managed Extensibility Framework) против IoC / DI

    В чем разница между SqlCommand.CommandTimeout и SqlConnection.ConnectionTimeout?

    Отключить автоматический подсчет ссылок для некоторых файлов

    Невозможно изменить ошибку возвращаемого значения c #

    Преобразование даты / времени для данного часового пояса – java

    Эта активность уже имеет панель действий, предоставляемую декором windows

    Могу ли я отменить бесплатное обновление Windows 10?

    IIS: тайм-аут ожидания и рециркуляция

    Не удалось загрузить файл или сборку «System.Web.Http 4.0.0 после обновления с 2012 по 2013 год»

    Правильный способ возврата JSON с помощью узла или Express

    Уже есть открытый DataReader, связанный с этой Командой, который должен быть закрыт первым

    Что такое амортизированный анализ алгоритмов?

    Вы не приняли лицензионные соглашения следующих компонентов SDK

    История команд?

    Явное vs Автоматическое привязка местоположения атрибутов для шейдеров OpenGL

    Давайте будем гением компьютера.