我有一个逗号分隔的字符串,需要拆分为二维数组。我正在创建这样的数组:
String str = "-,-,-,-,-,-,-,-,-,0,0,0,0,1,1,1,2,2,2,2,3,3,-,-,-,-,-,-,-,-,-,-";
String [] arr = str.split(",");
String [][] 2dArr = new String[8][4];
int j = 0;
int z = 0;
for(int i=0; i!=32; i++){
Log.i("loop vars", String.valueOf(i)+" "+String.valueOf(j)+" "+String.valueOf(z));
2dArr[z][j] = arr[i];
j++;
z++;
if(j==4){j=0;}
if(z==8){z=0;}
}
但是当我打印它时:
for (String [] a : 2dArr) {
Log.i("Array in 2dArr", Arrays.toString(a));
}
数组如下所示:
[-, null, null, null]
[null, -, null, null]
[null, null, -, null]
[null, null, null, -]
[-, null, null, null]
[null, -, null, null]
[null, null, -, null]
[null, null, null, -]
我做错了什么?如何解决这个问题?
答案 0 :(得分:3)
您遇到的问题是:
for(int i=0; i!=32; i++){
Log.i("loop vars", String.valueOf(i)+" "+String.valueOf(j)+" "+String.valueOf(z));
2dArr[z][j] = arr[i];
j++;
z++;
if(j==4){j=0;}
if(z==8){z=0;}
}
您正在递增j
和z
,它们会被初始化为0
,每个循环都会将此值递增1.这就是您的输出是对角输出的原因。
您想要做的是每次递增z
,一旦到达行尾,请递增j
。
使用数组初始化作为示例String [][] 2dArr = new String[8][4];
for(int i = 0; i < 8; i++) {
for(int j = 0; j < 4; j++) {
// add element into the column
}
// inserted into the last column, now we will update the row and continue
}
编辑:我建议不要在此处使用8
和4
作为硬编码值,而是实际获取数组的长度。但是,由于你似乎是初学者,我使用这些硬编码使这个例子更加清晰。
答案 1 :(得分:0)
您需要在for循环的每次迭代中更改行和列。您只想在到达该行的列末尾时更改行。
删除您当前拥有的z++
以及if (z==8)
部分,因为z
在这种情况下永远不会达到那么高,并将if (j==4)
部分更改为{ {1}}
if(j == 4) { j=0; z++; }
答案 2 :(得分:0)
您可以这样做:
byte[] bytes = null;
Document document = new Document(PageSize.LETTER);
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("\some\dir\file.pdf"));
document.open();
Class.forName("com.mysql.jdbc.Driver");
Connection cn = DriverManager.getConnection("jdbc:mysql://localhost:3306/database", "user", "pass");
PreparedStatement st = cn.prepareStatement("SELECT file FROM files");
ResultSet rs = st.executeQuery();
try {
while (rs.next()) {
bytes = rs.getBytes("file");
PdfReader reader = new PdfReader(bytes);
PdfImportedPage page;
page = writer.getImportedPage(reader, 1);
Image image = Image.getInstance(page);
document.add(image);
document.newPage();
} catch (Exception e) {
System.out.println(e);
}
}
然后只需打印出上面显示的类似for循环的2d数组。