2017-12-23 7 views
-2

正直なところ、この質問をどのように行うのか分かりません。申し訳ありませんが、意味が分からない場合はここで説明しようとします。私は、ユーザーがコマンドを入力できるアプリを作っています。単語の最初の数文字を入力して、プログラムで入力したいものを予測できるようにしたいと考えています。ドキュメントリスナーのifステートメントでStringsを使用する方法

private final static String[] commands = new String[] {"help", "time", "date", "again", "weather"}; 

public static void predictiveText() { 

     commandField.getDocument().addDocumentListener(new DocumentListener() { 
      @Override 
      public void removeUpdate(DocumentEvent e) { 

      } 

      @Override 
      public void insertUpdate(DocumentEvent e) { 
       if (e.getOffset() + e.getLength() == e.getDocument().getLength()) 
        SwingUtilities.invokeLater(new Runnable() { 
         @Override 
         public void run() { 
          predict(commandField); 
         } 
        }); 
      } 

      @Override 
      public void changedUpdate(DocumentEvent e) { 

      } 
     }); 

    } 

    private static void predict(JTextField field) { 
     String text = field.getText(); 

     String prediction = null; 

     for (String color : commands) { 
      if (color.startsWith(text) && !color.equals(text)) { 
       if (prediction != null) 
        return; 

       prediction = color; 
      } 
     } 

     if (prediction != null) { 
      field.setText(prediction); 

      field.setCaretPosition(text.length()); 
      field.select(text.length(), prediction.length()); 
     } 
    } 

唯一の問題は、この文は、コマンドの処理を扱うために、私の場合は、プログラムが使用しているが、コマンドが一致するかどうかを確認するために、配列を使用しています。

} else if (AssistantFrame.getCommand().equalsIgnoreCase("card") || AssistantFrame.getCommand().equalsIgnoreCase("playing card") || AssistantFrame.getCommand().equalsIgnoreCase("playingcard") || AssistantFrame.getCommand().toLowerCase().contains("pick a card") || AssistantFrame.getCommand().toLowerCase().contains("name a card") || AssistantFrame.getCommand().toLowerCase().contains("choose a card") || AssistantFrame.getCommand().toLowerCase().contains("pick a playing card") || AssistantFrame.getCommand().toLowerCase().contains("name a playing card") || AssistantFrame.getCommand().toLowerCase().contains("choose a playing card")) { 

      MiscAction.generatePlayingCard(); 

if文にコマンドが入力されているかどうかを確認する方法はありますか。あるいは、予測テキストと一緒に動作させながらコマンドの処理を扱う別の方法がありますか?

答えて

1

あなたはTrieデータ構造を使うことができます。より速く、より洗練されたコード はJava標準ライブラリにはありませんが、かなり簡単に実装することができます。インターネットには例がたくさんあります。

+0

https://github.com/arunkumar9t2/trieこれはこれですか? –

+0

はい、基本的には実装ですが、より簡単な実装を書いただけで、Trieデータ構造の詳細についてのリンクが見つかります。 [gist link](https://gist.github.com/mehdithe/ea1fd039abcb8ccc2505a7a64e689ed7)これは要点へのリンクです。 –

関連する問題