我正在开发的应用程序的一部分包括一个日志文件查看器,它带有一个查找文本功能,它在 上调用模式匹配器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 中为我提供正确的输出。