2016-04-12 14 views
1

私のプログラム全体はコマンドプロンプトと似ています。現在、ユーザーが入力した単語を特定のファイルに追加する関数を作成しています。ユーザーは適切な構文に従わなければなりません。入力して:柔軟なスイッチケースの構文

APP C Now 

を入力して、ファイルC.

に「今」という単語を追加しますプログラム:

APP C She 

に単語「彼女」を追加するプログラムファイルC

私はすべてswitch文に入れています。例:

case "ADD C": 
case "DEL C": 

上記の2つのケースを含む他のケースは完全に正常です。私の質問は、どのように私はこの形式のスイッチケースを作るだろうか?あなたは、配列の各要素は、元の文字列の単語だった文字列の配列に分割するために、入力文字列に.split(" ")を使用することができ、即ち「APP C 単語

答えて

2

。あなたは、配列を持っていたら、つまり

"ADD C She".split(" ") = {"ADD", "C", "She"} 

では、簡単にswitch文、ファイル名の要素2、および引数の要素3で、コマンド名の要素1を確認することができます。

+0

ありがとうございますが、ケースの選択肢は何ですか? – DanielleS

+0

このように: String [] inputSplit = input.split( ""); if(inputSplit.equals( "ADD"){ // etc – nhouser9

1

実際には条件付き(ifまたはswitch)の代わりにルックアップテーブルと多相を使用するのが一般的です。これは、異なるコマンドが異なる数の引数を取る可能性が高いこのような場合に特に役立ちます。また、空白を重要にすることもできます。

あなたのコマンドのためのインタフェースを定義することができます。

interface Command { 
    void execute(String args); 
} 

は、その後、あなたのメインクラスでは、あなたはMap<String, Command> commandsがあるでしょう。二つの部分に入力を分割し、あなたのコマンドに2つ目の部分を渡す:

String commandName = scanner.next(); 
String args = scanner.nextLine(); 
commands.get(commandName).execute(args); 

は、これはあなたがインライン例すべてを処理しようとした場合よりも、あなたのループが劇的に簡素という利点があります。また、コマンドが自己完結型で独立して検証できるため、新しいコマンド(または既存のコマンドにエイリアスを追加)やテストが容易になり、拡張が容易になります。 argsという名前のファイルを開くなどの動作を繰り返す場合は、抽象クラスを使用してその動作を共有することもできます。

関連する問題