Como analisar corretamente o arquivo CSV para 2d Array?

Estou tentando analisar um arquivo CSV em uma matriz 2D, onde cada linha é uma entrada de dados e cada coluna é um campo nessa entrada.

Fazer isso de uma só vez simplifica e separa meu código de processamento do meu código de análise.

Eu tentei escrever um analisador simples que usavaString.Split separar o arquivo por vírgulas. Esta é uma abordagem horrível, como eu descobri. Falha na análise de casos especiais, como aspas duplas, feeds de linha e outros caracteres especiais.

Qual é a maneira correta de analisar um arquivo CSV em uma matriz 2D, como descrevi?

Amostras de código em Java seriam apreciadas. A matriz pode ser um objeto de lista dinâmica ou vetor ou algo parecido, só precisa ser indexável com dois indexadores.

questionAnswers(2)

yourAnswerToTheQuestion