1

我正在开发的应用程序的一部分包括一个日志文件查看器,它带有一个查找文本功能,它在 上调用模式匹配器JTextField#getText(),如下所示:

Matcher m = somePattern.matcher(textField.getText());
m.find(startPosn);
System.out.println("startPosn: " + m.start());
System.out.println("endPosn: " + m.end());

其中 textField 是 JTextField,
startPosn 设置为文本字段的当前插入符号位置

但是,此返回的开始和结束位置返回不正确的开始和结束插入符号位置,仅在 Windows 中
开始和结束位置都比它们应该的多 X,其中 X = 在 textField 中遇到新行的次数,直到 startPosn。

由于这在 Linux 中没有出现,我认为这可能与处理新行 (\r\n\n) 的方式不同有关。

难道我做错了什么; 我该如何解决这个问题?

实施。解决方案:

使用由 camickr 链接的 TFA 中的示例进行修改。

Matcher m = somePattern.matcher(textField.getDocument().getText(0, textField.getDocument().getLength()));
m.find(startPosn);
System.out.println("startPosn: " + m.start());
System.out.println("endPosn: " + m.end());

注意:仅更改了第一行。

这能够在 Linux 和 Windows 中为我提供正确的输出。

4

2 回答 2

3

我认为这可能与处理新行(\r\n 和 \n)的方式不同有关。

是的,这是 Windows 中的一个问题。

但是,我怀疑您会遇到 JTextField 问题,因为它们不包含新行字符串。

我建议您阅读Text and New Lines,它将解释如何为 JTextArea 和 JTextPane 处理这个问题。

如果您需要更多帮助,请发布显示问题的SSCCE 。

于 2009-11-02T06:18:58.607 回答
1

你可以使用这样的东西:

String text = textField.getText();
text.replaceAll(System.getProperty("line.separator"), "\n");

然后做你的事。在上面的代码中,您可以将“\n”替换为适合您需要的内容。

于 2009-11-02T06:08:09.110 回答