请教:如何将一个固定大小的String转换为整数二维数组(对,不是一维)

talent_marquis 2004-04-23 09:36:48
举个例子:
String为:
1,2,3,(回车符)
4,5,6,(回车符)
7,8,9,(回车符)

如何把它转换为二维数组

int[][] aaa={
{1,2,3},
{4,5,6},
{7,8,9}
}

?
...全文
158 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
BigBangBug 2004-04-24
  • 打赏
  • 举报
回复
其实是很基本的io操作
BigBangBug 2004-04-24
  • 打赏
  • 举报
回复
conanrei2004(目标-Microsoft) 的方法就可以了
talent_marquis 2004-04-24
  • 打赏
  • 举报
回复
这样说吧有一个String,内容如下:
"1,2,3,\n4,5,6,\n7,8,9,\n"

我需要把里面的123456789这些数字提取出来,放到一个二维数组中,这个二维数组是什么呢?

int[][] aaa=int[3][3]

使aaa这个二维数组的内容变为:
{1,2,3}
{4,5,6}
{7,8,9}
gzyip 2004-04-24
  • 打赏
  • 举报
回复
不明白你说什么...String也是数组???
bigcrazy 2004-04-24
  • 打赏
  • 举报
回复
说到最优,我倒觉得用split或者StringTokenizer都不错。你可以这样测一下:
在运行那些代码前,获取一下系统时间,Date d1=new Date(),运行完后再运行Date d2=new Date。这样d2.getTime()-d1.getTime()最小的就是算法最优。
talent_marquis 2004-04-24
  • 打赏
  • 举报
回复
请大家再讨论讨论最优办法吧~

我明天或者后天再结贴
dlxu 2004-04-24
  • 打赏
  • 举报
回复
写了个大概算法,里面有一些错误,太晚了不想用心用DEBUGGER,自己稍微看一下








package stringtoarray;

public class Convert {
String str;
int p[][];
public Convert(String str) {
this.str=str;
/*int i;
char c1;
for (int j1 = 0; ; j1++) {
c1 = str.charAt(j1);
if(c1==','){

}
}*/
}

public Convert(){
this("");
}

private int countline(){
int returnNum=0;
char c1;
for(int j1=0;j1<str.length();j1++){
c1=str.charAt(j1);
if(c1=='\n')returnNum++;
}
return returnNum;
}

private int countrow(String str1){
int returnNum=0;
char c1=' ';
int j1=0;
try{
for (j1 = 0; j1 < str1.length(); j1++) {
c1 = str1.charAt(j1);
if (c1 == ',') returnNum++;
}
}catch(Exception e){
System.err.println(str1);
}
return returnNum;

}

public int[][] doConvert(){
int i1=0;
i1=countline();
p=new int[i1][];
int i2=0;
String[] tp1=new String[i1];
int[] tpint=new int[i1];
for(int i3=0;i3<i1;i3++){
for (int i4=i2;i2==0||str.charAt(i2-1)!='\n' ; i2++) {
if(str.charAt(i2)=='\n'){
tp1[i3] = str.substring(i4, i2);
System.out.println(tp1[i3]);
}i2++;

}
}
for(int i6=0;i6<i1;i6++){
// System.out.println(countrow(tp1[i6]));
tpint[i6]=this.countrow(tp1[i6]);
p[i6]=new int[tpint[i6]];
}
/* int maxrow=0;
for(int i6=0;i6<i1;i6++){
maxrow = maxrow>=i6?maxrow:i6;
}*/


for(int kx=0;kx<i1;kx++){
int total=0;
for(int ky=0;ky<tpint[kx];ky++){
String temp=tp1[kx].substring(total,total+1);
total++;
try{
p[kx][ky] = Integer.parseInt(temp);
}catch(Exception e){
System.err.print("Some Error in String!");
System.exit(0);
}
}
}
return p;
}

public static void main(String[] args) {
// Convert convert1 = new Convert(args[1]);
Convert convert1 = new Convert("1,2,3,\n4,5,6,\n");
int[][] temp1=convert1.doConvert();
for(int i=0;i<temp1.length;i++){
for (int j = 0; j < temp1[i].length; j++) {
System.out.print(temp1[i][j] + '\t');
}
System.out.println();
}

/* for(int i=0;i<"1,2,3,\n4,5,6,\n".length();i++){
System.out.println("1,2,3,\n4,5,6,\n".charAt(i));
}*/

}

}
talent_marquis 2004-04-24
  • 打赏
  • 举报
回复
-___-~ clip为笔误,是split方法。。。
talent_marquis 2004-04-24
  • 打赏
  • 举报
回复
已经实现……思路和楼上的差不多,不过用的是String的clip方法

大致代码如下:

String groundMatrix;
String[] groundMatrixRow;
int[][] groundMaze=new int[][];

groundMatrix=groundTa.getText();
groundMatrixRow=groundMatrix.split("\n");
for(int i=0;i<groundMatrixRow.length;i++)
{
String[] groundElement=groundMatrixRow[i].split(",");
for(int j=0;j<groundElement.length;j++)
groundMaze[i][j]=Integer.parseInt(groundElement[j]);
}
sean_gao 2004-04-24
  • 打赏
  • 举报
回复
package sean.home.test;

import java.util.*;

public class TestStringToArray {

public static void main(String[] args) {
String raw = "1,2,3,\n4,5,6,\n7,8,9,\n";
StringTokenizer st = new StringTokenizer(raw, " \n");
int a = st.countTokens();
int[][] res = new int[a][];
for (int i = 0; i < a; i++) {
StringTokenizer st2 = new StringTokenizer(st.nextToken(), ",");
int b = st2.countTokens();
res[i] = new int[b];
for (int j = 0; j < b; j++) {
res[i][j] = Integer.parseInt(st2.nextToken());
}
}
show2DArray(res);
}

public static void show2DArray(int[][] arr) {
for (int i = 0; i < arr.length; i++) {
int[] temp = arr[i];
for (int j = 0; j < temp.length; j++) {
System.out.print(temp[j]);
System.out.print(" ");
}
System.out.println();
}
}

}

// 随手写的,有很多偷懒的地方,仅供参考。
conanrei2004 2004-04-23
  • 打赏
  • 举报
回复
先按一维或链表读,记录一下max长度,与max宽度,然后new一个二维数组,写进取,题目没大看懂,不只这样可否?
dlxu 2004-04-23
  • 打赏
  • 举报
回复
可以,等会可以写一个贴出来
panpan221 2004-04-23
  • 打赏
  • 举报
回复
新手学习,友情UP

62,622

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧