jtextfield和\r\n问题

1cklez4t  于 2021-07-05  发布在  Java
关注(0)|答案(2)|浏览(605)

我正在开发的一个应用程序的一部分包括一个日志文件查看器,它带有一个find text函数,可以调用一个模式匹配器 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中都获得正确的输出。

km0tfn4u

km0tfn4u1#

您可以使用以下内容:

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

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

dba5bblo

dba5bblo2#

我认为这可能与处理新行(\r\n和\n)的方式不同有关。
是的,这在windows中是个问题。
但是,我怀疑jtextfield是否有问题,因为它们不包含新行字符串。
我建议您阅读文本和新行,它们将解释如何处理jtextarea和jtextpane。
如果您需要更多帮助,请发布您的sscce以显示问题。

相关问题