#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-файлы здесь.