【问题标题】:How can I get a line of string from a large block of string?如何从一大块字符串中获取一行字符串?
【发布时间】:2013-03-29 20:32:38
【问题描述】:

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

让我们这么说

String alltext = "敏捷的棕狐跳过了懒狗";

而用户突出显示的是String selectedtext

在这种情况下,让我们说

String selectedtext = "棕色";

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

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

这会很好。但是如果:

alltext = brownbrownbrownbrown;

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

有没有什么办法可以解决这个问题,或者从一个大块中获取一段字符串的位置?

谢谢!

【问题讨论】:

  • 有几个问题我认为相关的两个答案(在Careers 2.0 Icon下)
  • 为什么您将选择作为字符串进行跟踪,而不是像通常那样直接作为索引/偏移量? JTextPane 应该自动执行此操作。或者,换种说法:如果由于某种原因您只能确定用户正在查找的字符串,则无法知道它是哪一个。
  • 如何从 JTextPane 中获取索引值?有没有适合你的方法?
  • 谢谢,getSelectionStart() 似乎成功了。

标签: java string swing jtextpane indexof


【解决方案1】:

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

如果您发布您的 UI 代码,我们可能会很好地回答。

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

【讨论】:

    【解决方案2】:

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

    为了让某人选择文本,他们必须单击文本区域,拖动并释放单击。因此,附加一个 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() 显示一个新面板(或对话框或其他),让用户选择字体样式,然后将选择的字体返回给侦听器,侦听器将其应用于选定的文本。

    【讨论】:

    • 请modelToView / viewToModel (Document / AbstractDocument)
    • @mKorbel 我不确定你在说什么
    • 或者你可以只使用CaretListener 而不是使用鼠标事件来破解它
    • 当用户应该在单独的类中按下 JButton 来确定样式时,如何在 mouseReleased 方法中对 s 进行样式化?
    • @millimoose 同意没有 html、特殊和空白字符的 JTextArea,例如...
    猜你喜欢
    • 1970-01-01
    • 2011-11-30
    • 1970-01-01
    • 2022-01-04
    • 2013-03-01
    • 1970-01-01
    • 2012-04-08
    • 2017-06-19
    • 1970-01-01
    相关资源
    最近更新 更多