我正在嘗試構建一個簡單的解釋器。基本上我使用這種方法從的字符串中獲取我的HashMap
的密鑰。有8種不同的可能性(8個關鍵字),HashMap
中的一個字符串可以開頭。目前,我正在使用string.indexOf("something")
來查找關鍵字字符串,但是當我擁有多個關鍵字時,這當然並不靈活。使用Java string.indexOf()返回不同的子字符串 - 可能嗎?
所有在ArrayList
的字符串可以被分解成COMMAND +(指令)。 COMMANDS映射到HashMap
及其類。所以基本上這是一個2步驟的情況:第一次通過我需要從字符串中獲得第一個單詞/標記,然後字符串的其餘部分最好在相應的類中進一步分割/標記。
反正是有string.indexOf()
可以在某種程度上操縱返回多個子串的指數?或者我需要尋找其他方法嗎?請指教。
代碼如下所示:
public void parseCommands() {
List<String> myString = new ArrayList<String>();
myString.add(new String("# A TPL HELLO WORLD PROGRAM"));
myString.add(new String("# xxx"));
myString.add(new String("STRING myString"));
//myString.add(new String("LET myString= \"HELLO WORLD\""));
//myString.add(new String("PRINTLN myString"));
myString.add(new String("PRINTLN HELLO WORLD"));
myString.add(new String("END"));
System.out.println();
for (String listString : myString)//iterate across arraylist
{
if (listString.startsWith("#", 0))//ignore comments starting with #
{
continue;
}
int firstToken = listString.indexOf("END");
String command = listString;
Directive directive = commandHash.get(command);
if (directive != null) {
directive.execute(listString);
} else {
System.out.println("No mapped command given");
}
}
}
'indexOf'不能被操縱返回比它已經返回的任何其他。不知道你的輸入字符串是什麼樣的,不可能提供幫助 - 一個簡單的split()就足夠了嗎? – 2012-01-12 19:55:25
您可能想了解Java的RegEx功能......需要一些閱讀,嘗試和錯誤以及努力,但肯定會完成這項工作。 – Fildor 2012-01-12 19:56:22
你似乎沒有使用'firstToken'。你的解釋不夠清楚,以反映要求。 – 2012-01-12 20:02:59