用Java怎样把String[] 转换为double[][]

data是double[][]类型的,而我从数据库中取出来是double类型的(或者是String类型(数组)),怎样把之转换为double[][]类型的
[b]问题补充:[/b]
谢谢楼上的朋友。我是在做JFreeChart的时候,在数据库中取得数据,画出图表,以下是我的部分实现(主要是在转换成double[][]时出错啦):

while(it.hasNext()){
Object[] obj = (Object[])it.next();

sdb.append(obj[2].toString()).append("_");}//取得记录

String[] str = sdb.toString().split("_");//转换为String数组
int len = str.length;//计算数组大小

double[][] data = new double[len][len];//定义数组长度
for(int i=0;i<len;i++){
data[0][i] = Double.parseDouble(str[i]);}//填充值

CategoryDataset dataset = DatasetUtilities.createCategoryDataset(rowKeys, columnKeys, data);

报:The number of column keys does not match the number of columns in the data array.

请大家帮帮忙,谢谢!
[b]问题补充:[/b]
Sorry,因为我对数据结构不是很清楚。sdb代表StringBuffer,之前听说用这个存储比较好。它里面装的东西仅仅是一些数据,如:{100.00_500_600};(我用"_"作为标识去分隔)
构造出来的格式如:
double[][] data = new double[][]{{100.00},{500},{600}};

果然是StringBuffer。这样的话这段代码就不太好了……

首先,如果你使用的JDK版本在1.5或以上的话,StringBuffer已经不推荐使用了,由StringBuilder所替代。后者的性能跟更好一些。

其次,你在拼接完字符串之后,如果在实际代码里就跟问题里给出的代码一样,紧接着就做String.split()的话,那就浪费了。用实现了List接口的容器(ArrayList或者LinkedList)来保存中间结果不就好了么,没有必要拼接起来再分开
[code="java"]ArrayList tempList = new ArrayList();
while (it.hasNext()) {
Object[] obj = (Object[])it.next();
tempList.add(Double.parseDouble(obj[2].toString()));
// 不知道obj[2]里原本是什么,如果是double的话那直接强制转换类型就好了
} // 取得记录

double[] dArray = new double[tempList.size()];
for (int i = 0; i < dArray.length; ++i) {
dArray[i] = tempList.get(i);
} // 得到一行数据对应的double数组[/code]
当然如果你拼接起来是有别的用途,例如说存到数据库或者存到文本文件的话,那拼接成字符串也不是不行……

然后double[][]数组的意义。从你的代码看,你是想把一个一维的double数组硬塞到一个二维的double数组里(你的代码里虽然定义了一个len*len的矩阵,却只向其第一行填充了值)。请问你确定这么做是符合你的要求的么?JFreeChart的CategoryDataset需要的数据到底是什么,恐怕你得自己查一下文档去了解一下。有个朋友以前做过一个作业用过JFreeChart的XYPlot,可以看看他是怎么用数据的:[url]http://ravenex.iteye.com/blog/175557[/url](JFreeChart相关的代码在那帖的附件里)

每条String里都是一组double对应的字符串么?像这样么:
[code="java"]"12.3;23.4;34.56"[/code]
如果是类似这种的话,那只要把字符串的内容分隔开就行了嘛。

如果用的Java版本比较老那可以直接用str.split(";"),以分隔符作为参数分隔出一个String数组来,然后逐个转换为double:
[code="java"]String src = "12.3;23.4;34.56";
String[] sp = src.split(";");
double[] dArray = new double[sp.length];
for (int i = 0; i < sp.length; ++i) {
dArray[i] = Double.parseDouble(sp[i]);
}[/code]
对单个String这样做得到一个double[],循环对String[]处理就能得到double[][]。
如果用的Java版本是1.5或以上的话,也可以用java.util.Scanner来做这个分隔。不过用在这个地方恐怕代码会更繁琐,就不提了。

报的错说明你对数组长度的设置有问题。

[quote="林维煜"][code="java"]while (it.hasNext()) {
Object[] obj = (Object[])it.next();
sdb.append(obj[2].toString()).append("_");
} // 取得记录

String[] str = sdb.toString().split("_"); // 转换为String数组
int len = str.length; // 计算数组大小
double[][] data = new double[len][len]; //定义数组长度

for (int i = 0; i < len; i++) {
data[0][i] = Double.parseDouble(str[i]);
} // 填充值

CategoryDataset dataset = DatasetUtilities.createCategoryDataset(rowKeys, columnKeys, data);[/code][/quote]
请问这里的sdb是什么?

总觉得这里似乎做了无谓的操作:
字符串是在while循环里构造出来的,然后再拿出来split,还不如一开始用个容器(例如ArrayList)把中间结果装着(obj[2].toString()),然后直接来转换填充。诶不过这不是主要问题,主要问题是那sdb是什么,得到的字符串应该是什么样的,数据内容应该是什么样的。这些不详细描述的话,这段代码的意义(或者说其中的错误)找不出来……

这里的rowKeys和columnKeys这两个数组分别有多长?它们的长度应该跟data数组的两个维度的长度一致才对吧?也就是说应该有类似
[code="java"]double[][] data = new double[rowKeys.length][columnKeys.length];[/code]
才对。你现在的代码让人摸不着头脑……