Эффективность со строками Java

1

Когда мы расширяем DefaultHandler, мы обычно переопределяем функцию символов.

Мне было интересно, какой из них будет более эффективным способом извлечения строки?


  1. Будет ли использоваться цикл 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();
    }
    
  2. Используется ли простая подстрока?

    @Override
    public void characters(char[] ch, int start, int length) throws SAXException {
        String values = (new String(ch)).substring(start, start + length);
    }
    
  3. Есть ли другой подход?

  • 1
    Обратите внимание , что #characters(char[] ch, int, int) метод может вызываться несколько раз подряд , и вы должны добавить символьные данные в StringBuilder члена класса , а не обрабатывать его , пока вы не нажмете соответствующую #endElement(String,String,String) звонок. Добавление фрагментов символов должно выполняться путем вызова StringBuilder#append(char[], int, int) .
  • 0
    @Jens Вы правы! Я много работал с фидами, и я заметил это поведение. Проблема в том, что будет слишком грязно использовать StringBuilder для добавления (особенно для части ведения ссылки). Я предпочитаю использовать конкатенацию строк в этом случае.
Показать ещё 2 комментария
Теги:

2 ответа

5
Лучший ответ

Существует конструктор, который принимает char [] и диапазон, если это то, что вы ищете:

new String(ch, start, length);
  • 0
    О, и, разумеется, он будет работать лучше, чем любой.
0

Класс String имеет новый конструктор, который может выполнять ваши требования следующим образом

1) new String(char[] value)

2) new String(char[] value, int StartIndex, int numberOfCharacter)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню