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

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

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

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

Спасибо заранее,

Ответ 1

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

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

Ответ 2

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

Этот учебник поможет больше