JTextField和\ r \ n问题

时间:2009-11-02 06:02:30

标签: java swing string jtextfield

我正在处理的应用程序的一部分包括一个日志文件查看器,带有一个查找文本函数,它在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)的方式有所不同。

我做错了什么;我该如何工作?

默认地将Impl。溶液

使用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中为我提供正确的输出。

2 个答案:

答案 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”替换为适合您需要的内容。