Я анализирую файл csv с помощью Apache Commons CSVRecord и CSVFormat в Java. Я получил следующую запись в формате String Записи: CSVRecord [comment=null, mapping = {Id=0, FirstName=1, LastName=2}, номер_записи=1, значения=[1, Джон, Уэйн]]
Мне нужно извлечь значения только для примера: 1, Джон, Уэйн
Использовал следующие варианты, чтобы получить результат.
String[] split = record.split("values=\\[");
String result = split[1].substring(0, split[1].length() - 2);
Мой вопрос: есть ли лучший вариант (быстрее), чем этот в Java?
Вы пытаетесь разобрать значение CSVRecord.toString()
? Что именно вы делаете?
Что сказал Кароль. Используйте один из методов CSVRecord.get()
или CSVRecord.iterator()
или CSVRecord.toMap()
для доступа к значениям
да. Я пытаюсь разобрать значение CSVRecord.toString().
возможно, вы можете использовать метод toMap()
на своем CSVRecord
, тогда у вас будет Map<String,String>
, и вы получите прямой доступ к своим FirstName
и LastName
Какой вариант лучше из двух: 1. Построить строку путем добавления (методы CSVRecord.get для каждой записи) 2. Вариант, который я пробовал в вопросе
Попытка выполнить синтаксический анализ строкового представления имеет подводные камни в дополнение к меньшей производительности. Например, решение @Guilherme потерпит неудачу, если одно из значений содержит values=[
или ,
(первое маловероятно, второе может быть меньше)
Вариант 1. Создайте строку путем добавления (методы CSVRecord.get для каждой записи) - не будет ли он менее эффективен, чем этот вариант?
Попробуй это:
String txt = "CSVRecord [comment=null, mapping = {Id=0, FirstName=1, LastName=2}, recordNumber=1, values=[1, John, Wayne]]";
String[] sub = txt.substring(txt.indexOf("values=[")).split("[\\[\\]]");
System.out.println(sub[1]);
Не могли бы вы вставить пример входного CSV-файла?