Работа с большими фрагментами текста в источнике Java

Есть ли хорошие способы работы с блоками текста (строки) в исходном коде Java? Многие другие языки имеют heredoc синтаксис, доступный для них, но Java нет. Это затрудняет работу с такими вещами, как библиотеки тегов, которые выдает много статической разметки, и модульные тесты, где вам нужно сопоставлять сравнения с блоками XML.

Как другие люди работают вокруг этого? Возможно ли это? Или мне просто нужно смириться с этим?

Ответ 1

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

Тенденция в программном обеспечении заключается в том, чтобы отделить код от данных, на которых он работает. Большие текстовые разделы, даже если они предназначены только для отображения или сравнения, являются данными и, таким образом, обычно хранятся снаружи. Стоимость чтения файла (или даже кэширования результата в памяти) довольно низкая. Интернационализация проще. Изменение проще. Управление версиями проще. Другие инструменты (например, проверки орфографии) могут быть легко использованы.

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

То же самое происходит с XML. На самом деле, для XML я бы сказал, что во многих случаях вы хотели бы прочитать XML и построить дерево DOM, которое вы затем сравнили бы, а не сравнить текст, на которые могут влиять пробелы. И вручную создание дерева XML в вашем unit test является уродливым.

Ответ 2

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

Ответ 3

Закрывает опцию в Java до HereDoc является java.text.MessageFormat. Вы не можете вставлять логику. Это простая утилита для спасения значений. Нет переменных. Вы должны использовать индексирование на основе нуля. Просто следуйте за javadoc.

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