[英]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.