[英]character position ambiguity java
我有一个使用styledDocument
的JEditorPane
。
我的问题是由换行符引起的。 因为我正在申请Windows,所以换行符由(CR LF)表示。
问题在于,文本提取的表单编辑器工具包上的chartAt(int)
方法将换行符计算为两个字符,而styledDocument上的setCharacterAttributes 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。
如何保持一致的角色位置?
使用StyledDocument
读取文档时,它将保留在内存中,并且将换行符替换为'\\n'
。 资料来源: 这里
因此,您必须考虑到这一点,并使用EndOfLineStringProperty属性检查换行符的长度。
因此,每当在文本中看到'\\n'
时,就必须知道是否必须将其算作1或2个字符。
其他解决方案是:
EndOfLineStringProperty
更改为'\\n'
,然后指示StyledDocument
将文档保存到字符串中。 然后,在该String中,可以将换行符视为一个字符,就像StyledDocument
所做的一样。 EndOfLineStringProperty
替换为text
内的'\\n'
,然后计数将起作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.