Игнорировать 2-й разделитель в той же строке

#java #string #split

Вопрос:

Как я могу игнорировать второе появление разделителя в одной и той же строке при разделении в java?

Допустим, это одна из строк в csv-файле:

 This is key, This is, value   

В приведенном выше сценарии я хочу разделить строку запятой и получить значение как

 lt;column 1gt;This is key lt;column 2gt; This is, value  

Как мне игнорировать вторую запятую при этом line.split(",") ?

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

1. Пожалуйста, предоставьте свой код до сих пор 🙂

2. Получите библиотеку анализатора CSV. Если в поле есть запятая, его необходимо заключить в кавычки. Если это не так, поговорите с людьми, которые предоставляют данные.

3. Вам нужно игнорировать все запятые , кроме первой? Или все входные данные содержат всего три столбца?

4. @AlexRudenko На данный момент я вижу только 2-е вхождение разделителя в одной строке. Но было бы лучше использовать первый разделитель и игнорировать остальные после первого.

Ответ №1:

Это можно сделать с помощью перегруженной версии split :

 String value = "This is key, This is, value"; String[] splitter = value.split(",", 2);  

Запуск этого в JShell:

 jshellgt; String value = "This is key, This is, value";  ...gt; String[] splitter = value.split(",", 2); value ==gt; "This is key, This is, value" splitter ==gt; String[2] { "This is key", " This is, value" }  

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

Вероятно, вы хотите применить a trim() к строкам результатов. Но лучшая идея-это действительно иметь анализатор CSV, если вы хотите обрабатывать CSV-файлы здесь.