Самый быстрый способ замены данных в Java

#java #string

#java #строка

Вопрос:

Мне нужно написать Java-метод, который будет:

  • извлеките HTML из таблицы данных
  • найдите в HTML определенный маркер (встроенный в комментарий)
  • замените этот маркер другим HTML

Например, исходный HTML-код может содержать заголовок страницы, маркер и нижний колонтитул страницы. Я бы хотел получить этот HTML-код и заменить маркер содержимым страницы, например, публикацией в блоге.

Мои главные проблемы — это скорость и функциональность. Поскольку исходный HTML и HTML, который будет введен в исходный HTML, могут быть довольно большими, мне нужен совет.

Я знаю, что мог бы использовать строки и использовать String.replace(), но меня беспокоят ограничения по размеру строки и то, насколько быстро это будет выполняться.

Я также подумываю об использовании объектов Reader / Writer, но я не знаю, будет ли это быстрее или нет.

Я знаю, что существует объект Java Clob, но я действительно не вижу, можно ли его использовать в моей конкретной ситуации.

Любые идеи / советы будут приветствоваться.

Спасибо,

Тим

Ответ №1:

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

Да, для этого вам нужно написать синтаксический анализатор.

Не загружайте их в большой буфер, выполняйте поиск, регулярные выражения и все остальное в буфере, а затем записывайте это. Обработка данных один раз — это самое быстрое, что вы можете сделать.

Если у вас есть данные позже в файле, которые заполнят места выше в файле, то вы застряли, впитывая все это.

Наконец, почему вы просто не используете что-то вроде Apache Velocity?

Ответ №2:

Насколько велик ваш HTML-код? Гигабайт? Мегабайт? 100k? 10k? Для всех, кроме первого, манипулирование строками будет просто отличным. Если этот ответ вас не удовлетворяет, то используйте indexOf() , чтобы найти начало и конец маркера, и используйте substring() для записи частей исходной строки до и после.

Ответ №3:

StringBuilder (не потокобезопасный) и StringBuffer (потокобезопасный) — это две основные конструкции для обработки строк. Но если вы считываете свои данные из потока, вероятно, будет лучше, если вы сделаете это на лету. (прочитайте строки, найдите маркер, если он найден, напишите вместо него содержимое)