我如何让textarea返回字符串的数组列表,而不只是字符串

时间:2018-07-06 00:03:48

标签: java javafx

对于我的个人项目,我已经为其控制台版本编写了代码,我需要一个ArrayList字符串。 ArrayList的字符串是通过控制台输入添加的。这是我的方法:

 ArrayList<String> input = new ArrayList<>();
 Scanner sc = new Scanner(System.in);
 while (sc.hasNextLine()) {
        String lineNew = sc.nextLine();
        if (lineNew.isEmpty()) {
            break;
        }
        input.add(lineNew);
    }

因此,我基本上将Scanner读取的每一行添加到ArrayList中。

所以我在JavaFX版本中所做的是,我创建了一个文本区域,该区域将从中获取输入。在打印输出的类之后,我看到textarea的gettext()方法返回一个String而不是一个ArrayList,这本身就已经很奇怪了,因为包含的输入进入了。无论如何,有没有一种方法可以返回ArrayList的字符串,而不是仅返回具有textarea或其他类型的文本字段的字符串,或者我需要从长字符串中提取子字符串并将其放入ArrayList,还是我可以做些其他事情。

先谢谢了。

2 个答案:

答案 0 :(得分:1)

getText()正确且可预测地将返回输入到TextArea中的整个文本。为了获得ArrayList<String>,您需要自己进行转换。

非常感谢,这样做非常简单。字符串具有split()方法,该方法使您可以通过基于定界符分割字符串来创建数组。在您的情况下,您可以使用换行字符或\n。将其与Arrays类结合在一起,您会在ArrayList的每一行中轻松而轻松地TextArea

ArrayList<String> textLines = 
    new ArrayList<>(Arrays.asList(textArea.getText().split("\n")));

以下是一个简单的MCVE来演示:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextArea;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

import java.util.ArrayList;
import java.util.Arrays;

public class Main extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {

        // Just a simple interface
        VBox root = new VBox(5);
        TextArea textArea = new TextArea() {{
            setWrapText(true);
        }};
        Button btnGetArray = new Button("Print Array");

        // Set the action of the button to print the result of creating the ArrayList
        btnGetArray.setOnAction(event -> {
            System.out.println(getStringArray(textArea.getText()));

        });

        // Show the interface        
        root.getChildren().addAll(textArea, btnGetArray);
        primaryStage.setScene(new Scene(root));
        primaryStage.show();
    }

    private ArrayList<String> getStringArray(String string) {
        // This method builds an array list by taking the full String and splitting it
        // at each new line (\n) character.
        return new ArrayList<>(Arrays.asList(
                string.split("\n")
        ));
    }
}

答案 1 :(得分:0)

TextArea.getParagraphs返回每行包含一个String的列表。要将内容复制到ArrayList,只需使用ArrayList的构造函数:

List<String> list = new ArrayList<>(textArea.getParagraphs());

或者只在第一个空的String之前获取:

List<String> paragraphs = textArea.getParagraphs();
int endIndex = paragraphs.indexOf("");
List<String> list = new ArrayList<>(endIndex >= 0 ? paragraphs.subList(0, endIndex) : paragraphs);