簡體   English   中英

將字符串轉換為2D字符數組

[英]Convert String to 2D Char Array

我正在開發自上而下的回溯解析器,但是在導入語法時陷入了困境。 我的老師希望我們采用String[]並將其轉換為char[][]

例如,講師會在命令行上鍵入一個語法,即aa S b X aa S a X a S a X ,而我的程序應該采用這種格式並將其放入2D字符庫中。

輸入中的X表示| 在語法上,因此生成的語法應該是

char[][] productions = new char[][] { {'a','a','S','b'},
                                      {'a','a','S','a'},
                                      {'a','S','a'},
                                      {'\0'} };

其中\\0代表空字符串。 以下代碼我產生了char[4][]但是我不確定如何為每個單獨的產生制作數組。

    char[][] prod; int prodCount = 0, numProds = 0;
    String[] input = new String[] {"a","a","S","b","X","a","a","S","a","X",
                                    "a","S","a","X"};

    for(int i = 0; i < input.length; i++) {
        if(input[i] == "X") 
            prodCount++;
    }

    prod = new char[prodCount][];

    for(int i = 0; i < prod.length; i++) {
        for(int k = 0; k < input.length; k++) {
            if(input[k] == "X") {
                prod[i] = new char[numProds];
                numProds = 0; break;
            } else
                numProds++;
        }
    }

    for(int i = 0; i < prod.length; i++) {
        for(int j = 0; j < input.length; j++) {
            if(input[j] == "X") break;
            prod[i][j] = input[j].charAt(0);
        }
    }

編輯:我已經解決了如何轉換語法,但被困在我可以如何在我的2D數組中包含\\0

    char[][] prod; int prodCount = 0, numProds = 0;
    String[] input = new String[] {"a","a","S","b","X",
                                   "a","a","S","a","X",
                                   "a","S","a","X"};

    for(int i = 0; i < input.length; i++) {
        if(input[i] == "X") 
            prodCount++;
    }

    prod = new char[prodCount][];

    int current = 0;
    for(int i = 0; i < input.length; i++) {
        if(input[i] == "X") {
            prod[current] = new char[numProds];
            current++; numProds = 0;
        } else
            numProds++;
    }

    int currentTerminal = 0; current = 0;
    for(int i = 0; i < input.length; i++) {
        if(input[i] == "X") {
            currentTerminal = 0;
            current++;
        }
        else {
            prod[current][currentTerminal] = input[i].charAt(0);
            currentTerminal++;
        }
    }

這是一些滿足您需要的簡單代碼:

    String grammar = "aaSbXaaSaXaSaX";
    String[] components = grammar.split("X");
    char[][] chars = new char[components.length + 1][];
    for (int i = 0; i < components.length; i++) {
        String component = components[i];
        chars[i] = component.toCharArray();
    }
    chars[components.length] = new char[] { '\0' };

暫無
暫無

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

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