2012-11-09 1 views
3

Я новичок в Java, поэтому, пожалуйста, со мной. Я пытаюсь прочитать BufferedReader, который читает в файле, содержащем записи, разделенные запятыми. Я хотел бы разделить каждую строку (или запись) между двумя запятыми, разделить двойные кавычки и поместить каждый из них в индекс массива String. Например:Java - Записи, разделенные запятой, в String Array?

говорят, у меня есть эта строка в файле:

("0001", "00203", "82409" (перевод строки)

"0002", "00204", "82500" (перевод строки)

и т.д.)

Я хочу поставить 0001 в массив String [1], Я хочу 00203 в массив строк [2], и так далее ....

Следующий код перемещает файл, помещая все записи в столбце 2 в массив String [2]. Это означает, что после выполнения кода ниже, если я сделаю System.out.println (arr [2]), он будет печатать 00203 и 00204, тогда как я хотел бы, чтобы массив [2] был 00203, а массив [5] 00204.

Вот мой код:

public String[] getArray(String source) { 

FileInputStream fileinput = new FileInputStream(source); 
GZIPInputStream gzip = new GZIPInputStream(fileinput); 
InputStreamReader inputstream = new InputStreamReader(gzip); 
BufferedReader bufr = new BufferedReader(inputstream); 

String str = null; 
String[] arr = null; 
    while((str = bufr.readLine()) != null) { 
    arr = str.replace("\"", "").split("\\s*,\\s*"); 
} 
return arr; 

Любая помощь очень ценится, спасибо.

ответ

0

Вы пробовали использовать класс сканера, а также сканер.nextInt(). тогда вам не нужно делать паузу.

Scanner s = new Scanner(inputstream); 
ArrayList<String> list = new ArrayList<String>(); 

while (s.hasNextInt()) 
    list.add(s.nextInt()); 
String[] arr = list.toArray(new String[list.size()]); 
0

Немногие из этих модификаций должны работать на вас.

public String[] getArray(String source) { 

FileInputStream fileinput = new FileInputStream(source); 
GZIPInputStream gzip = new GZIPInputStream(fileinput); 
InputStreamReader inputstream = new InputStreamReader(gzip); 
BufferedReader bufr = new BufferedReader(inputstream); 

String str = null; 
List<String> numbers = new LinkedList<String>; 

while((str = bufr.readLine()) != null) { 
    String[] localArr = str.split(","); 
    for(String intString : localArr){ 
    numbers.add(intString.trim()); 
    } 
} 
return arr; 
0

Не тестировалось:

arr = str.replaceAll("\"", "").replaceAll("(","").replaceAll(")","").split(","); 
1

Commons CSV был разработан для конкретного случая использования. Давайте не будем изобретать колесо, код ниже приведет к анализу GZipped CSV в поля и строки и, похоже, это то, что вы пытаетесь сделать.

public String[][] getInfo() throws IOException { 
    final CSVParser parser = new CSVParser(new FileReader(new InputStreamReader(new GZIPInputStream(fileinput)), CSVFormat.DEFAULT.withIgnoreSurroundingSpaces(true)); 
    String[][] result = parser.nextRecord().values(); 
    return result; 
}