繁体   English   中英

字符位置歧义java

[英]character position ambiguity java

我有一个使用styledDocumentJEditorPane

我的问题是由换行符引起的。 因为我正在申请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' ,然后计数将起作用。

它仅在第一个换行符之前有效。 然后它得到一个char,每个换行符又有一个char。

这听起来像与JTextPane发现的相同问题。 查看文本和以获取更多信息。

提议的解决方案是使用:

text.getDocument().getText();

代替

text.getText();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM