我想创建一个只有textarea和一个按钮的小型java fx应用程序,当你在textarea中输入一些字符串并按下提交时,它会在舞台上显示小表,结果显示每个Word有多少个出现。 所以我的问题是:即使我不知道查找事件的关键是什么以及如何将字符串从文本区域连接到地图,地图是查找事件的最佳解决方案。
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);
}
}
并且第二个类再次是具有表视图的gui类
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();
}
}
和第三类shoyld是魔术发生的类:
public class Logic {
public void logic()
}
}
答案 0 :(得分: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()));
}
检查Javadoc以查看每个步骤的作用:Pattern
,Collectors.groupingBy()
,Function
等。
如果您想以不区分大小写的方式计算,可以将Function.identity()
替换为String::toLowerCase
.collect(Collectors.groupingBy(String::toLowerCase, Collectors.counting()));
如果您想忽略标点符号,可以添加
map(s -> s.replaceAll("[^a-zA-Z]",""))
到管道。