Suppose you have assigned a custom CharacterIterator.Attribute to the first five characters of a ten-character string.
Suppose further that the remaining CharacterIterator.Attribute characters are assigned to other characters.
Why then, when I call AttributedString.getRunStart(firstAttribute) , I get 0 (I expect this), and when I call AttributedString.getRunStart(secondAttribute) , I also get 0?
Here is my installation code:
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);
And now here is the code that outputs some diagnostic data:
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)); }
Output:
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
Pay attention, in particular, to the last entry, which says that "Start" for "baseID" is 5. Huh?
source share