如何计算java中textArea中段落的行数? [复制]

Posted

技术标签:

【中文标题】如何计算java中textArea中段落的行数? [复制]【英文标题】:How to count lines of a paragraphs in textArea in java? [duplicate] 【发布时间】:2020-06-28 14:18:57 【问题描述】:

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

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

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

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

我的 JavaFX 控制器如下所示:

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);

    


【问题讨论】:

不支持 - 隐约记得这里有一个关于 SO 的较早问题,有一个解决方法。 我很难确切地理解每个 post 对我有用的地方。您能否具体说明我如何将其合并到我的代码中?我会很感激的。 【参考方案1】:

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

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

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

但由于文本区域是可滚动的,所以我不明白你所经历的所有这些麻烦背后的原因。

【讨论】:

以上是关于如何计算java中textArea中段落的行数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

前端可以用js获取textarea中当前光标位置的行数吗?

如何得到textarea内容的高度或textarea内容的行数

使用 jQuery 限制 textarea 中的行数和显示行数

严格限制 textarea Angular 中的行数

计算 Java 字符串中的行数

如何使用opencv准确计算图像中的行数