我正在尝试构建一个简单的解释器。基本上我使用这种方法从的字符串中获取我的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