This week's book giveaway is in the OCAJP 8 forum. We're giving away four copies of OCA Java SE 8 Programmer I Study Guide and have Edward Finegan & Robert Liguori on-line! See this thread for details.
if you have multi-dimensional data of unpredictable size I'd really recommend you to use collections, i.e. something like LinkedLists to implement this. That doesn't make it look beautiful but at least you can deal with all kind of 2-dimensional data and you don't waste too much memory which could be the case with a large 2-dimensional array.
If the number of columns is fixed, use a List<String> or List<Object>. If not, a List<List<String>> or List<List<Object>> is the way to go. A fixed array size with a String or Object is bad; you need to be careful of null values and even worse, an array that is too small.