gpt4 book ai didi

java - 如何计算java中textArea中段落的行数?

转载 作者:行者123 更新时间:2023-12-01 17:55:34 25 4
gpt4 key购买 nike

我正在开发一个JavaFX项目,并在scrollPane中定义了textArea,应在其中从用户选择的文本文件中输入文本。

我添加了一个计数器,用于计算插入到 textArea 中的行数: textArea.getText().lines().count()这样我就可以设置textArea的高度(通过在textArea的PrefRowCount参数中设置从计数器获得的值)。

问题是分子以这种方式计算textArea中的段落(根据文本文件中的写入方式),而我需要的是获取每个段落中的行数如我的textArea所示(根据字体设置、字体大小等)。

在这里我问:我可以通过哪种方式枚举textArea中每个段落中的行,以便我可以将其调整为textArea应具有的正确高度?

我的 JavaFX Controller 如下所示:

public class Controller {

ObservableList<String> days = FXCollections.observableArrayList
("1", "2", "3", "4", "5", "6", "7", "8", "9", "10",
"11", "12", "13", "14", "15", "16", "17", "18", "19", "20",
"21", "22", "23", "24", "25", "26", "27", "28", "29", "30"),
months = FXCollections.observableArrayList
("Tishrei", "Cheshvan", "Kislev", "Tevet", "Shevat", "Adar",
"Nisan", "Iyar", "Sivan", "Tammuz", "Av", "Elul");

public ComboBox day, month;
public TextField year;
public Button ok;
public ScrollPane scrollPane;
public TextArea textArea;

@FXML
private void initialize(){
day.setItems(days);
month.setItems(months);
}

public void okClick() throws IOException {

String dayValue = (String) day.getValue();
String monthValue = (String) month.getValue();

String dayFile = ("/textFiles/days/"+dayValue+".txt");
String monthFile = ("/textFiles/months/"+monthValue+".txt");

InputStream inDayFile = getClass().getResourceAsStream(dayFile);
InputStream inMonthFile = getClass().getResourceAsStream(monthFile);

BufferedReader readerDayFile = new BufferedReader(new InputStreamReader(inDayFile, "UTF-8"));
BufferedReader readerMonthFile = new BufferedReader(new InputStreamReader(inMonthFile, "UTF-8"));

String dayTitle = ("Day " + dayValue + ":\n");
String monthTitle = ("Month " + monthValue + ":\n");

String scanDayFile = new Scanner(readerDayFile).useDelimiter("\\Z").next();
String scanMonthFile = new Scanner(readerMonthFile).useDelimiter("\\Z").next();

textArea.setText(dayTitle + scanDayFile + "\n\n" + monthTitle + scanMonthFile);

long lineCount = textArea.getText().lines().count();
textArea.setPrefRowCount(Integer.parseInt(String.valueOf(lineCount)));
scrollPane.setVvalue(0);

}

}

最佳答案

文本区域中的行与您可能认为的行概念有些不同。在java中,一行是用换行符或\n分隔的文本。

当文本无法容纳在文本区域宽度中时,文本字符串的剩余字符将被移动到文本区域中的下一行,但这并不意味着它实际上是换行符。当按下 Enter 按钮或在字符串中遇到\n 时,一行将完成。

如果您需要调整文本区域并且从文本文件中读取内容,您可能需要计算文本文件中的字符数,找出可以适合文本区域宽度的字符数,并将字符数除以该字符数以确定文本区域所需的高度。

但是由于文本区域是可滚动的,我无法完全理解您所经历的所有这些麻烦背后的原因。

关于java - 如何计算java中textArea中段落的行数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60723437/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com