簡體   English   中英

將一維字符串轉換為整數的二維數組

[英]Convert a 1D string to a 2D array of Integers

我有一個字符串,我想將其轉換為2D整數數組。 這就是我在做什么:

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的每個元素,然后將拆分后的字符串的每個元素解析為Integer和將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;
       }
    }
String string1="[1,2,3]~[4,5,6]~[7,8,9]~";
String string2 = string1.replace("[","").replace("]","");

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;
   }
}

對於完全動態的數組:

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();
}

它打印:

1 2 3 
4 5 6 
7 8 9 

這是一個有效的解決方案。 在獲得所有其他答案之前,我已經開始研究它,因此,如果沒有有意義的道歉,我深表歉意:

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會引發異常,我認為這是正確的行為。 另一方面,格式錯誤的行可能會產生不可預測的輸出(如果輸入即使有很小的潛力都可能發生格式錯誤,我會說這是錯誤的)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM