Предположим, вы назначаете пользовательский CharacterIterator.Attribute
первым пяти символам строки из десяти символов.
Предположим, что в дальнейшем вы назначаете другой CharacterIterator.Attribute
оставшимся символам.
Почему тогда, когда я звоню AttributedString.getRunStart(firstAttribute)
, я получаю 0 (я ожидаю этого) и когда я звоню AttributedString.getRunStart(secondAttribute)
, я также получаю 0?
Вот мой установочный код:
final AttributedString s = new AttributedString("SQ3R9FFFFF");
final Attribute baseID = new Attribute("Base ID") {};
final Attribute fs = new Attribute("FFF") {};
s.addAttribute(baseID, "Ignored", 0, 5);
s.addAttribute(fs, "Whatever", 5, 10);
final AttributedCharacterIterator iterator = s.getIterator();
assertNotNull(iterator);
А теперь вот код, который выводит некоторую диагностику:
for (char c = iterator.first(); c != DONE; c = iterator.next()) {
System.out.println("Character: " + c);
System.out.println("Character index: " + iterator.getIndex());
System.out.println("Attributes: " + iterator.getAttributes());
System.out.println("Start for baseID: " + iterator.getRunStart(baseID));
System.out.println("Limit for baseID: " + iterator.getRunLimit(baseID));
System.out.println("Start for fs: " + iterator.getRunStart(fs));
System.out.println("Limit for fs: " + iterator.getRunLimit(fs));
}
Вывод такой:
Character: S
Character index: 0
Attributes: {com.foobar.collection.api.TestCaseAttributedString$1(Base ID)=Ignored}
Start for baseID: 0
Limit for baseID: 5
Start for fs: 0
Limit for fs: 5
Character: Q
Character index: 1
Attributes: {com.foobar.collection.api.TestCaseAttributedString$1(Base ID)=Ignored}
Start for baseID: 0
Limit for baseID: 5
Start for fs: 0
Limit for fs: 5
Character: 3
Character index: 2
Attributes: {com.foobar.collection.api.TestCaseAttributedString$1(Base ID)=Ignored}
Start for baseID: 0
Limit for baseID: 5
Start for fs: 0
Limit for fs: 5
Character: R
Character index: 3
Attributes: {com.foobar.collection.api.TestCaseAttributedString$1(Base ID)=Ignored}
Start for baseID: 0
Limit for baseID: 5
Start for fs: 0
Limit for fs: 5
Character: 9
Character index: 4
Attributes: {com.foobar.collection.api.TestCaseAttributedString$1(Base ID)=Ignored}
Start for baseID: 0
Limit for baseID: 5
Start for fs: 0
Limit for fs: 5
Character: F
Character index: 5
Attributes: {com.foobar.collection.api.TestCaseAttributedString$2(FFF)=Whatever}
Start for baseID: 5
Limit for baseID: 10
Start for fs: 5
Limit for fs: 10
Character: F
Character index: 6
Attributes: {com.foobar.collection.api.TestCaseAttributedString$2(FFF)=Whatever}
Start for baseID: 5
Limit for baseID: 10
Start for fs: 5
Limit for fs: 10
Character: F
Character index: 7
Attributes: {com.foobar.collection.api.TestCaseAttributedString$2(FFF)=Whatever}
Start for baseID: 5
Limit for baseID: 10
Start for fs: 5
Limit for fs: 10
Character: F
Character index: 8
Attributes: {com.foobar.collection.api.TestCaseAttributedString$2(FFF)=Whatever}
Start for baseID: 5
Limit for baseID: 10
Start for fs: 5
Limit for fs: 10
Character: F
Character index: 9
Attributes: {com.foobar.collection.api.TestCaseAttributedString$2(FFF)=Whatever}
Start for baseID: 5
Limit for baseID: 10
Start for fs: 5
Limit for fs: 10
Обратите внимание, в частности, на последнюю запись, в которой сообщается, что «Start» для «baseID» равен 5. А?