2017-08-30 5 views
0

私は、テキストエリアにテキストボックスとボタンが1つしかない小さなjava fxアプリケーションを作成したいと思います。各単語が出現した数を計算します。 私の質問は:出現を見つけるためのキーと、文字列をテキストエリアからマップに接続する方法がわからなくても、出現を見つけるのに最高の解決策はありますか?javafxハッシュマップにテキストエリアの値を入れる

public class Main extends Application { 

    @Override 
    public void start(Stage primaryStage) { 
     Button btn = new Button(); 
     btn.setText("Word counting"); 
     TextArea txt=new TextArea(); 
     txt.setMaxSize(450, 200); 
     btn.setOnAction(new EventHandler<ActionEvent>() { 

      @Override 
      public void handle(ActionEvent event) { 

       primaryStage.hide(); 
       ShowResults.drugiProzor(); 
      } 
     }); 

     BorderPane root = new BorderPane(); 

     root.setTop(txt); 
     HBox hbox=new HBox(); 
     hbox.setPadding(new Insets(20,20,100,180)); 
     hbox.getChildren().add(btn); 
     root.setBottom(hbox); 


     Scene scene = new Scene(root, 450, 300); 

     primaryStage.setTitle("Word counting!"); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     launch(args); 
    } 
} 

及び第二のクラスは、再びテーブルビュー

public class ShowResults { 

    static Stage secondaryStage; 
    public static void drugiProzor() { 
     secondaryStage=new Stage(); 
     TableView table=new TableView(); 

     TableColumn column1=new TableColumn("Word"); 
     column1.setMinWidth(200); 


     TableColumn column2=new TableColumn("Number of occurencies"); 
     column2.setMinWidth(200); 


     table.getColumns().addAll(column1,column2); 

     StackPane pane=new StackPane(); 
     pane.getChildren().add(table); 
     Scene scene = new Scene(pane, 450, 300); 


     secondaryStage.setScene(scene); 
     secondaryStage.setTitle("Counting words"); 
     secondaryStage.show(); 
    } 
} 

及び第三種の魔法がこのような何かをhappendsクラスでshoyldとGUIクラスです:

public class Logic { 

    public void logic() 

    } 
} 

答えて

0

することができますだけ何かのようにする

public Map<String, Long> countWordOccurences(String text) { 
    return Pattern.compile("\\s+") // regular expression matching 1 or more whitespace 
     .splitAsStream(text)  // split at regular expression and stream words between 
            // group by the words themselves and count each group: 
     .collect(Collectors.groupingBy(Function.identity(), Collectors.counting())); 
} 
あなたは、大文字と小文字を区別しない方法でカウントするようにしたい場合は、あなたが String::toLowerCase

.collect(Collectors.groupingBy(String::toLowerCase, Collectors.counting())); 

Function.identity()を置き換えることができますなど、

を、PatternCollectors.groupingBy()Function

は、各ステップが何をしているか確認するためにJavadocをチェック句読点を無視する場合は、

map(s -> s.replaceAll("[^a-zA-Z]","")) 

をパイプラインに追加できます。

+0

ありがとう、本当に私を助けました、これは何とかテーブルビューの中に入れられますか? – Pera

+0

@Peraええ、はい、マップからのデータをテーブルビューに入力してください。 –

+0

私はすべての結果を1行に収めることができました。そして、1行に1つの単語と実行回数を入れたいと思っています。これはすべて申し訳ありませんが、私はtjisを終了しようとしています。 dbとsql.Thanksを事前に知っている – Pera

関連する問題