Как получить AttributedCharacterIterator для возврата прогона для данного атрибута? - PullRequest
4 голосов
/ 11 мая 2011

Предположим, вы назначаете пользовательский 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. А?

1 Ответ

0 голосов
/ 17 мая 2011

Согласно Javadoc:

Прогон относительно атрибута - это максимальный текстовый диапазон, для которого:

  • атрибут не определен или равен нулю для всего диапазонаили
  • значение атрибута определено и имеет одинаковое ненулевое значение для всего диапазона.

Я думаю, что это может быть первая точка маркера.Для символов 0-4 атрибут fs не определен, поэтому это допустимый диапазон.baseID определен, а также действителен.

http://download.oracle.com/javase/1,5.0/docs/api/java/text/AttributedCharacterIterator.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...