从AttributedString获取Text(普通字符串) - 怎么做,为什么这么难?

时间:2014-11-03 20:37:36

标签: java string

我可以这样创建一个AttributedString

AttributedString as = new AttributedString("Hello world"); 

直截了当的问题 - 如何从AttributedString对象获取基础文本(" Hello world")?

as.toString()生成字符串" java.text.AttributedString@65f00565"

我在AttributedString.class中看到此信息已存储,但故意隐私 -

  

所有(除长度外)读取操作都是私有的,   因为通过迭代器

访问了AttributedString实例

所以看起来我需要使用as.getIterator()来获取AttributedCharacterIterator并迭代它以生成底层字符串?这是最好的方法,为什么这些信息无法访问?

2 个答案:

答案 0 :(得分:3)

这就是你要问的实际代码:

    AttributedString s = new AttributedString("Hello");
    AttributedCharacterIterator x = s.getIterator();
    String a = "";

    a+=x.current();
    while (x.getIndex() < x.getEndIndex())
        a += x.next();
    a=a.substring(0,a.length()-1);

    System.out.println(a);

至于适当性,我推荐AttributedString的文档,特别是getIterator()方法:

  

创建一个AttributedCharacterIterator实例,该实例提供对该字符串的全部内容的访问。

似乎没有其他方法可以访问实际的String内容。

答案 1 :(得分:0)

public static String getString(AttributedString attributedString){
        AttributedCharacterIterator it = attributedString.getIterator();
        StringBuilder stringBuilder = new StringBuilder();

        char ch = it.current();
        while( ch != CharacterIterator.DONE)
        {
            stringBuilder.append( ch);
            ch = it.next();
        }
        return stringBuilder.toString();
    }