Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Groovy говорит, что моя строка Unicode слишком длинная

Автор вопроса: MikeyОтветов: 2

Как часть моего, вероятно, неправильного и громоздкого решения распечатать форму, я взял документ MS-Word, сохраненный как XML, и я пытаюсь сохранить этот XML в виде заводной строки, чтобы я мог ${fillOutTheFormProgrammatically}

Однако, поскольку документы MS-Word настолько велики, насколько они есть, строка состоит из 113100 символов Юникода, а Groovy говорит, что она ограничена 65536. Есть ли способ изменить это или я застрял с разделением строки?

Groovy - нужно сделать печатную форму

Это то, что я пытаюсь сделать.

Обновление: чтобы было ясно, что это слишком длинная строка Groovy. Я думаю, что обычная строка может быть хорошей. Собираюсь изменить стратегию и добавить несколько строк в файл, который я могу легко найти, например %!%variable_name%!%, а затем выполнить .replace(... ммм, я чувствую, что здесь появится новый вопрос...

stringunicodegroovyutf-8maxlength

Ответы

Ответ 1 · рейтинг 6 · Jörn Horstmann

Вы встраиваете эту строку непосредственно в свой код? Сам jvm имеет ограничение на длину строковых констант, см. Спецификация ВМ, если вас интересуют подробности.

Уродливым обходным путем может быть разделение строки на более мелкие части и объединение их во время выполнения. Лучшим решением было бы сохранить текст во внешнем файле и прочитать содержимое из вашего кода. Вы также можете упаковать этот файл вместе со своим кодом и получить к нему доступ из пути к классам, используя Class#getResourceAsStream.

Ответ 2 · tim_yates

Какое исключение вы получаете? Я не верю, что Groovy String ограничен 65536, так как это в основном строка Java.

Звучит так, как будто вы пытаетесь где-то рекурсировать и достигаете предела стека вызовов в 65536.

При этом, однако, загрузка более 100 тыс. символов в память за один раз кажется излишним.

Почему бы не проанализировать XML с помощью синтаксического анализатора SAX или аналогичного, чтобы получить результаты?

Или почему бы не сохранить только те данные, с которых вам нужно начать, вместо того, чтобы полагаться на сотни тысяч символов xml (которые, как я предполагаю, вам нужна только небольшая часть)

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы