我目前正在用JavaFX编写一个工具。
因此我需要使用cmd + c从Microsoft Excel复制一些列, 然后我在剪贴板中用制表符分隔列。
例如:
Column1 Column2 Column3
Value1 Value2 Value3
Value4 Value5 Value6
当我在像Atom这样的编辑器中浏览剪贴板时,它们看起来就是这样,但是当我将它们粘贴到TextArea中时,换行符就会消失。
我需要这样做,因为我想使用Open CSV库从Excel处理数据。
有没有办法保持换行符?
修改
我刚刚发现,如果我使用Clipboard.getSystemClipboard().getString()
并将String传递给我的Open CSV处理程序,它可以工作,但是如果我使用textArea.setText(string)
在TextArea中设置相同的字符串仍然没有显示的文本中的换行符。
虽然它现在有效,但我想用户将数据粘贴到TextArea中,因为这比点击“粘贴并加载”按钮更常见,然后用户也可以检查是否所有数据都是粘贴。
答案 0 :(得分:3)
我认为问题在于,当Excel将文本复制到系统剪贴板时,它表示换行符为'\r'
,(ASCII 0xc
)而不是更标准的'\n'
(ASCII 0xa
)。
这是一种破解,但如果你这样做
TextArea textArea = new TextArea(){
@Override
public void replaceText(IndexRange range, String text) {
super.replaceText(range, text.replaceAll("\r", "\n"));
}
@Override
public void replaceText(int start, int end, String text) {
super.replaceText(start, end, text.replaceAll("\r", "\n"));
}
@Override
public void replaceSelection(String replacement) {
super.replaceSelection(replacement.replaceAll("\r", "\n"));
}
});
它会过滤所有'\r'
并将其替换为'\n'
。
编辑:这是使用TextFormatter
:
TextArea textArea = new TextArea();
UnaryOperator<Change> filter = c -> {
c.setText(c.getText().replaceAll("\r", "\n"));
return c ;
};
textField.setTextFormatter(new TextFormatter<>(filter));