Когда мы расширяем DefaultHandler, мы обычно переопределяем функцию символов.
Мне было интересно, какой из них будет более эффективным способом извлечения строки?
Будет ли использоваться цикл for и StringBuilder?
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
StringBuilder sb = new StringBuilder(length);
for(int i=start; i<start+length; i++)
sb.append(ch[i]);
String values = sb.toString();
}
Используется ли простая подстрока?
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
String values = (new String(ch)).substring(start, start + length);
}
Есть ли другой подход?
Существует конструктор, который принимает char [] и диапазон, если это то, что вы ищете:
new String(ch, start, length);
Класс String имеет новый конструктор, который может выполнять ваши требования следующим образом
1) new String(char[] value)
2) new String(char[] value, int StartIndex, int numberOfCharacter)
#characters(char[] ch, int, int)
метод может вызываться несколько раз подряд , и вы должны добавить символьные данные вStringBuilder
члена класса , а не обрабатывать его , пока вы не нажмете соответствующую#endElement(String,String,String)
звонок. Добавление фрагментов символов должно выполняться путем вызоваStringBuilder#append(char[], int, int)
.