将String转换为2D int数组

时间:2013-01-24 22:46:54

标签: java multidimensional-array type-conversion

我有从String转换为二维int数组的问题。
假设我有:

String x = "1,2,3;4,5,6;7,8,9"

(在我的程序中它将是来自文本区域的String。)我想创建数组n x n

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

(对于下一阶段是必要的。)我尝试分割字符串并创建一维数组,但我不知道下一步该做什么。


正如您所建议的那样,我首先尝试使用;然后使用,进行拆分,但我的解决方案并不好。它仅在有3 x 3表时才有效。如何创建一个循环制作String数组?

public int[][] RunMSTFromTextFile(JTextArea ta)
    {
        String p = ta.getText();
        String[] tp = p.split(";");

        String tpA[] = tp[0].split(",");
        String tpB[] = tp[1].split(",");
        String tpC[] = tp[2].split(",");

        String tpD[][] = {tpA, tpB, tpC};

        int matrix[][] = new int[tpD.length][tpD.length];

        for(int i=0;i<tpD.length;i++)
        {
            for(int j=0;j<tpD.length;j++)
            {
                matrix[i][j] = Integer.parseInt(tpD[i][j]);
            }
        }
        return matrix;
    }

5 个答案:

答案 0 :(得分:3)

  1. ;拆分以获取行。
  2. 循环它们,递增计数器(例如x
    1. ,拆分以获取每行的值。
    2. 循环这些值,递增计数器(例如y
      • 解析每个值(例如,使用parseInt的{​​{1}}方法之一)并将其添加到数组的Integer

答案 1 :(得分:2)

如果您已创建int[9]并希望将其拆分为int[3][3]

for (int i = 0; i < 3; i++) {
  for (int j = 0; j < 3; j++) {
    toArray[i][j] = fromArray[(3*i) + j);
  }
}

现在,如果二维数组不是矩形,即内部数组的大小对于所有外部数组都不相同,那么您需要更多的工作。您最好使用Scanner并在nextStringnext之间切换。最大的挑战是,在到达行终止分号之前,您不会知道每行中元素(列)的数量

答案 2 :(得分:2)

使用拆分后,请查看Integer.parseInt()以获取数字。

String lines[] = input.split(";");
int width = lines.length;
String cells[] = lines[0].split(",");
int height = cells.length;
int output[][] = new int[width][height];

for (int i=0; i<width; i++) {
    String cells[] = lines[i].split(",");
    for(int j=0; j<height; j++) {
        cells[i][j] = Integer.parseInt(cells[j]);
    }
}

然后您需要决定如何处理NumberFormatExceptions

答案 3 :(得分:0)

使用2分裂的解决方案:

String input = "1,2,3;4,5,6;7,8,9";

String[] x = input.split(";");

String[][] result = new String[x.length][];
for (int i = 0; i<x.length; i++) {
    result[i] = x[i].split(",");
}

这给出了一个二维数组的字符串,您需要在之后解析这些字符串,这取决于您对这些数字的用途。以下解决方案显示了在构建结果时如何解析它们:

String input = "1,2,3;4,5,6;7,8,9";

String[] x = input.split(";");

int[][] result = new int[x.length][];

for (int i = 0; i < x.length; i++) {
    String[] row = x[i].split(",");
    result[i] = new int[row.length];

    for(int j=0; j < row.length; j++) {
        result[i][j] = Integer.parseInt(row[j]);
    }
}

答案 4 :(得分:0)

超级简单的方法!!!

package ADVANCED;
import java.util.Arrays;
import java.util.Scanner;

public class p9 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc=new Scanner(System.in);

        String x=sc.nextLine();
        String[] array = x.split(",");
        int length_x=array.length;
        int[][] two=new int[length_x/2][2];

        for (int i = 0; i <= length_x-1; i=i+2) {
            two[i/2][0] = Integer.parseInt(array[i]);
        }

        for (int i = 1; i <= length_x-1; i=i+2) {
            two[i/2][1] = Integer.parseInt(array[i]);
        }   
    }
}