我使用JEditorPane
styledDocument
。
我的问题是由换行引起的。因为我正在申请Windows,换行符由(CR LF)表示。
问题是文本提取表单编辑器工具包上的chartAt(int)
方法将换行符计为两个字符,但styledDocument上的setCharacterAttributes(int, int, AttributeSet, boolean)
方法将换行符计为一个字符。
假设我想在所有字符“福”上应用属性集。简单直观:
String text; //set to text of JEditorPane
StyledDocument doc; //set to doc of JEditorPane
int length = text.length();
for (int iii = 0; iii < length; iii++) {
if (text.chartAt(iii) == '福')
doc.setCharacterAttributes(iii, 1, AttributeSet, boolean);
}
它只能在第一个换行符之前使用。然后它会关闭一个char,并且每个换行符都会有一个char。
我如何处理一致的角色位置?
答案 0 :(得分:1)
当使用StyledDocument
读取文档时,它将保留在内存中,换行符由'\n'
替换。资料来源:here
因此,您必须考虑到这一点,并使用EndOfLineStringProperty property检查换行符的长度。
因此,每当您在文本中看到'\n'
时,您必须知道是否必须将其计为1或2个字符。
其他解决方案是:
EndOfLineStringProperty
更改为'\n'
,然后指示StyledDocument
将文档保存为字符串。然后在该String中,您可以将换行计为一个char,就像StyledDocument
一样。EndOfLineStringProperty
内每次出现'\n'
替换为text
,然后计数就可以了。答案 1 :(得分:0)
它只能在第一个换行符之前使用。然后它会关闭一个char,并且每个换行符都会有一个char。
这听起来与JTextPane发现的问题相同。查看Text and New Lines了解详情。
建议的解决方案是使用:
text.getDocument().getText();
而不是
text.getText();