如何从一大块字符串中获取一行字符串?

时间:2013-04-07 20:45:24

标签: java string swing jtextpane indexof

我要做的是获取一个大字符串的片段。我尝试过使用indexOf(),但是当重复文本时,它完全失败了。我的最终目标是让用户能够在JTextPane中选择文本并仅对该部分文本进行样式化。我已经获得了与StyledDocuments一起使用的样式,我甚至将它设置为只设置用户选择的文本,但这是我的问题。

让我们说

  

String alltext =“快速的棕色狐狸跳过懒狗”;

用户突出显示的是String selectedtext

在这种情况下,我们只说

  

String selectedtext =“brown”;

我的目标是获取所选文本的偏移量和长度。对于这个特殊的句子,我可以简单地做:

int offset = alltext.indexOf(selectedtext);
int length = selectedtext.length();

这样可以正常工作。但是如果:

  

alltext = brownbrownbrownbrownbrown;

用户突出显示第三个棕色。如果我像以前那样做同样的事情,程序将只选择第一个棕色而不是真正的棕色,它将为第一个设置样式。

有没有办法绕过这个或替代从大块中获取一段String的位置?

谢谢!

2 个答案:

答案 0 :(得分:1)

这是一个UI问题,而不是java.lang.String问题。

如果你发布你的用户界面代码,我们可以很好地回答。

使用Swing,TextComponent和底层模型可能会有所帮助,为您提供当前选择的startend索引。

答案 1 :(得分:0)

不确定我是否正确理解了您的问题。如果您说要检测用户何时选择了文本,然后将该文本设置为样式:

为了让某人选择文字,他们必须点击文字区域,拖动并释放点击。因此,附加一个MouseListener并实现mouseReleased方法来检查是否选择了任何文本,如果是,则将其保存为字符串:

public void mouseReleased(MouseEvent e) {
    if (textArea.getSelectedText != null){ //see if they selected something 
        String s = textArea.getSelectedText();
        //stylize s
        }

编辑:如果你打算使用按钮,那就更容易了。将ActionListener添加到按钮和

     public void ActionPerformed(ActionEvent e) {
    if (textArea.getSelectedText() != null){ //see if they selected something 
        Font f = showStyleOptionsMenu();
        textArea.getSelectedText().setFont(f);
        }

showStyleOptionsMenu()显示一个允许用户选择字体样式的新面板(或对话框或其他),然后将选择的字体返回给侦听器,将其应用于所选文本。