我正在处理的应用程序的一部分包括一个日志文件查看器,带有一个查找文本函数,它在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中为我提供正确的输出。
答案 0 :(得分:3)
我认为可能与a有关 新的方式不同 处理行(\ r \ n和\ n)。
是的,这是Windows中的一个问题。
但是,我怀疑你的JTextField会有问题,因为它们不包含新的行字符串。
我建议你阅读Text and New Lines,它将解释如何为JTextArea和JTextPane处理这个问题。
如果您需要更多帮助,请发布显示问题的SSCCE。
答案 1 :(得分:1)
您可以使用以下内容:
String text = textField.getText();
text.replaceAll(System.getProperty("line.separator"), "\n");
然后做你的东西。在上面的代码中,您可以将“\ n”替换为适合您需要的内容。