如何获取 JTextPane 中插入符号周围的字符串?

How to get the string in the JTextPane around the caret?

例如,有一个 JTextPane,其中包含一些文本,如“123456abcd789”,插入符号现在位于“7”之间。

请看这里的解释: “123456abcd|789”。这里的'|'代表插入符号。

现在我想获得插入符前最长的字符串,它只包含 a-z。这里是“abcd”。

但是如果我使用方法 jtextpane.getCaretPosition(),我会得到一个整数 11。(因为插入符号前有 10 个 ascii 字符和一张图片)。这不是我想要的整数。也许我可以统计img的字符数,但是还是比较麻烦,而且容易出bug。

那么如何得到正确的字符串呢?

示例

<html>
    <body>
        <p>
            Hello, everybody!!<br>
            <img src="xx.jpg">
        </p>
        <p>
            Hello, everybody|!!<br>   //The caret is here, at the left of '!'
            <img src="xx.jpg">
        </p>
        <p>
            Hello, everybody!!<br>
            <img src="xx.jpg">
        </p>
    </body>
<html>

在上面的示例中,插入符号现在位于第二个句子中。

我想做的是将插入符号前的“everybody”替换为“everyone”(其余的“everybody”保持不变)。但是,如果我使用 getCaretPosition(),我将无法获得 '!' 的正确索引。在 HTML 文本中。

那么解决方案是什么?

您可以使用正则表达式来计算从 A 到 Z 和 a 到 z 的字符数。

正确的表达方式是:([a-zA-Z]+)

您可以使用 this online regex tool.

尝试更多组合

编辑

Here 是您可以使用的正则表达式。