2012-02-14 1 views
0

Можно ли заставить читателя CSV похож на этотСокрытие CSV

while((line = reader.readLine()) != null){ 
      String[] values = line.split(","); 
      for(String s : values) { 
       data.add(s); 
} 

, но вместо того, чтобы просто запятой, имеют различные расколы для каждой строки, например:

value/value;value=value 

вместо того, чтобы просто значение , значение, значение, значение

+0

Короче говоря, довольно легко да, определить массив символов а = { ';', '/',» ['} и т. д. и перебирать их, почему вы все равно пытаетесь это сделать? Вы можете столкнуться с проблемами, если какая-либо из строк значений содержит один из ожидаемых чартеров, и, очевидно, порядок символов должен быть одинаковым на обоих концах. – Waltzy

+0

@ Вальсий все входные данные в моих руках, поэтому порядок символов не будет проблемой. Я просто думал, что это больно, чтобы перепроектировать данные, если они были полны, казалось бы, случайных разделителей строк. – Jack

ответ

2

String#split принимает регулярное выражение, а не только аргумент String, поэтому вы можете использовать выражение типа ;|/|=|, для расщепления.

+0

Я прав, думая, что «|» является символом «или». – Jack

+0

Да. Это один из способов сделать «или» в этом случае. Другой способ - использовать группу символов с '[;/=,]', как предпочитают другие комментаторы. –

+0

скажите, если бы я использовал выражение с несколькими символами для разделения, например, «hello | there», он бы распознавал только «привет» или «там» как разделитель, или он также принимал бы любой отдельный символ (например: «h» или «t ") – Jack

1

Конечно, вы можете реализовать ридер для вашего запутанного CSV, но формат файл не CSV больше, и вы будете иметь больше проблем, чтобы определить набор символов разделителей (они не должны быть частью значений) ,

Самый простой способ: написать кодировщик, который преобразует юридический CSV в ваш собственный формат данных и декодер преобразования обратно в юридический CSV.

BTW - вы можете расшифровать с помощью одного разделенной команды:

String[] values = line.split("[/;=]"); 

split принимает регулярное выражение в качестве аргумента.

+0

, который звучит как план. Я хочу сохранить CSV в запутанной форме, чтобы я мог написать кодировщик для собственного использования, а затем сделать часть кодировщика CSV-считывателя правильно? – Jack

+0

Декодер, чтобы быть точным.Данные -> CSVWriter -> Encoder -> База данных и более поздняя база данных -> Декодер -> CSVReader -> Данные –

+0

Извините, что я хотел сказать, что сделаю «декодер» частью читателя, если это имеет смысл. – Jack

1

Сплит принимает регулярное выражение как аргумент String. Например, это будет разделено на любой из символов, которые вы использовали в вашем примере.

line.split("[/;=]")

1

Разделение метод String, также может быть вызван с использованием regular expression. В вашем случае, фиксированная строка кода будет:

String[] values = line.split("[,/;=]"); // specific chars you want to look for 

или

String[] values = line.split("[^0-9]"); // everything except digits 

 Смежные вопросы

  • Нет связанных вопросов^_^