Java 将一维字符串转换为二维整数数组

Java 将一维字符串转换为二维整数数组,java,arrays,parsing,multidimensional-array,Java,Arrays,Parsing,Multidimensional Array,我有一个字符串,我想把它转换成一个二维整数数组。这就是我正在做的: String string1="[1,2,3]~[4,5,6]~[7,8,9]~"; //Putting each element into an array of strings String stringArray[]=string1.split("~"); //Determining the number of columns for the 2D array int countints=0; Scanner in

我有一个字符串,我想把它转换成一个二维整数数组。这就是我正在做的:

String string1="[1,2,3]~[4,5,6]~[7,8,9]~";

//Putting each element into an array of strings

String stringArray[]=string1.split("~");

//Determining the number of columns for the 2D array

int countints=0;
Scanner ins = new Scanner(stringArray[0]);
while (ins.hasNext()){
    countints+=1;
    ins.next();
}

//converting into an array of integers

int intArray[][]=new int[stringArray.length][countints];

在这里,我被困在如何将每个整数解析为2D数组中。

初始化2D数组后,您需要解析
stringArray
中的每个元素,方法是去掉尾随和前导的'[',']'括号对,并用将其拆分并将拆分字符串的每个元素解析为整数,并将该int值放在给定2d数组的正确位置

编辑:工作解决方案

    String string1="[1,2,3]~[4,5,6]~[7,8,9]~";

    String stringArray[]=string1.split("~");

    int countints = stringArray[0].substring(1, stringArray[0].length()-1).split(",").length;

    int intArray[][]=new int[stringArray.length][countints];

    for(int i = 0; i < stringArray.length; i++)
    {
       String s = stringArray[i].substring(1, stringArray[i].length()-1);
       String[] elementArray = s.split(",");
       for(int j = 0; j < elementArray.length; j++)
       {
           int val = Integer.parseInt(elementArray[j]);
           intArray[i][j] = val;
       }
    }
string1=“[1,2,3]~[4,5,6]~[7,8,9]~”;
字符串stringArray[]=string1.split(“~”);
int countints=stringArray[0]。子字符串(1,stringArray[0]。长度()-1)。拆分(“,”)。长度;
int intArray[][]=new int[stringArray.length][countints];
对于(int i=0;i
string1=“[1,2,3]~[4,5,6]~[7,8,9]~”;
字符串string2=string1.replace(“[”,”).replace(“]”,”);
对于(int i=0;i
对于完全动态的阵列:

String string1 = "[1,2,3]~[4,5,6]~[7,8,9]~";
String[] lines = string1.split("(^|~)\\[");
int[][] array = new int[lines.length][0];

Pattern pat = Pattern.compile("\\d+");

int lineIndex = 0;
for (String line : lines) {

    //if the row size is dynamic
    Matcher m1 = pat.matcher(line);
    int rowSize = 0;
    while (m1.find())
        rowSize++;

    array[lineIndex] = new int[rowSize];

    int colIndex = 0;
    Matcher m2 = pat.matcher(line);
    while (m2.find()) {
        array[lineIndex][colIndex++] = Integer.parseInt(m2.group());
    }
    lineIndex++;
}

for(int i=0; i<array.length;i++){
    for(int j=0; j<array[i].length;j++){
        System.out.print(array[i][j] + " ");
    }
    System.out.println();
}

这里有一个干净的解决方案。在我读完所有其他答案之前,我就开始研究它,因此,如果它没有对已经存在的内容进行有意义的补充,我表示歉意:

public class SO {
    public static int[][] parse(String input) {
        String[] rows = input.split("~");
        int[][] ints = new int[rows.length][];
        int j = 0;
        for(String row : rows) {
            String[] cols = row.substring(1, row.length()-1).split(",");
            int k = 0;
            ints[j] = new int[cols.length];
            for(String col : cols) {
                ints[j][k++] = Integer.parseInt(col);
            }
            j++;
        }

        return ints;
    }

    public static void main(String[] args) {
        for(int[] row : parse("[1,2,3]~[4,5,6]~[7,8,9]~")) {
            for(int col : row) {
                System.out.print(","+col);
            }
            System.out.println();
        }
    }
}
这将产生以下输出:

,1,2,3
,4,5,6
,7,8,9

至于错误检查,您应该预先决定如何处理错误检查,因为这是编写的,一个无效的int将抛出一个异常,我认为这是正确的行为。另一方面,格式不正确的行可能会产生不可预测的输出(如果输入有哪怕是最微小的可能格式不正确的话,我会说这是错误的)。

您需要进一步将数字与
“[1,2,3]”
checkout
Matcher
类隔离开来,然后查看
Integer.parseInt()
小心-
parseInt
会抛出错误。请确保没有任何编译错误。另外,我注意到在计算countint时,代码中有一个bug。它实际上得到的值为0。确保它的值为3,所有这些都应该是好的。我运行了这个程序,它给出了正确的输出。如果有一个数字超过一个数字,你的代码就不起作用。
public class SO {
    public static int[][] parse(String input) {
        String[] rows = input.split("~");
        int[][] ints = new int[rows.length][];
        int j = 0;
        for(String row : rows) {
            String[] cols = row.substring(1, row.length()-1).split(",");
            int k = 0;
            ints[j] = new int[cols.length];
            for(String col : cols) {
                ints[j][k++] = Integer.parseInt(col);
            }
            j++;
        }

        return ints;
    }

    public static void main(String[] args) {
        for(int[] row : parse("[1,2,3]~[4,5,6]~[7,8,9]~")) {
            for(int col : row) {
                System.out.print(","+col);
            }
            System.out.println();
        }
    }
}
,1,2,3
,4,5,6
,7,8,9