私は簡単なインタープリタを構築しようとしています。基本的に私はこのメソッドを使用してArrayList
の文字列から私のHashMap
のキーを取得しています。 HashMap
の文字列で始まる8つの異なる可能性(8つのキーワード)があります。現在、私はstring.indexOf("something")
を使用してキーワード文字列を検索していますが、もちろん、複数のキーワードがあると、これは柔軟ではありません。Javaのstring.indexOf()を使用して異なる部分文字列を返すことは可能ですか?
ArrayList
のすべての文字列をCOMMAND +(命令)に分割することができます。 COMMANDはHashMap
とそのクラスにマップされています。基本的には2段階の状況です:最初に、最初の単語/トークンをStringから取得し、残りの文字列を適切なクラスでさらに分割/トークン化する必要があります。
とにかく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()'で十分でしょうか? –
あなたはJavaのRegEx機能について読んでみたいと思うかもしれません...読んで、試してみて、エラーと努力が必要ですが、確かにその仕事をしています。 – Fildor
あなたは 'firstToken'を使用していないようです。説明は、要件を反映するほど明確ではありません。 –