对于我的个人项目,我已经为其控制台版本编写了代码,我需要一个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
,还是我可以做些其他事情。
先谢谢了。
答案 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);