21

Java ソース コード内でテキスト ブロック (文字列) を操作する良い方法はありますか? 他の多くの言語にはヒアドキュメント構文が用意されていますが、Java にはありません。これにより、大量の静的マークアップを出力するタグ ライブラリや、XML ブロックに対する比較をアサートする必要がある単体テストなどを操作するのはかなり不便になります。

他の人はこれをどのように回避しますか? それは可能ですか?それとも我慢するしかないですか?

4

3 に答える 3

1

テキストが静的であるか、パラメータ化できる場合、考えられる解決策は、テキストを外部ファイルに保存してからインポートすることです。ただし、これによりファイル I/O が作成されますが、これは不要であるか、パフォーマンスに影響を与える可能性があります。このソリューションを使用するには、ファイルの内容をキャッシュして、ファイルの読み取り回数を減らす必要があります。

于 2009-04-23T17:47:18.587 に答える
1

Java での HereDoc への closes オプションは、java.text.MessageFormat です。ロジックを埋め込むことはできません。これは単純な値エスケープ ユーティリティです。使用される変数はありません。ゼロベースのインデックスを使用する必要があります。javadoc に従ってください。

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

于 2011-11-07T16:27:51.727 に答える
0

特定のフォーマッタを使用して、任意のテキスト ファイルまたは長いリテラルを変換して Java 文字列として埋め込むことはできますが (たとえば、改行、必要なエスケープなどを使用)、これらの機能が必要になる頻繁な状況は思いつきません。 .

ソフトウェアの一般的な傾向は、コードを操作対象のデータから分離することです。大きなテキスト セクションは、表示や比較のみを目的としている場合でもデータであるため、通常は外部に保存されます。ファイルを読み取る (または結果をメモリにキャッシュする) コストはかなり低くなります。国際化はより簡単です。変更はより簡単です。バージョン管理がより簡単になります。他のツール (スペル チェッカーなど) も簡単に使用できます。

モックと比較したい単体テストの場合、大規模なテキスト比較が必要になることに同意します。ただし、このような大きなファイルを処理する場合、通常、いくつかの異なる大きな入力で動作していくつかの大きな出力を生成できるテストが必要になるため、インライン化するのではなく、テストで適切なファイルをロードしないのはなぜですか?

XML も同様です。実際、XML の場合、多くの場合、XML を読み取って DOM ツリーを作成し、空白の影響を受ける可能性のあるテキスト比較を行うよりも、それを比較したいと思うでしょう。また、単体テストで XML ツリーを手動で作成するのは見苦しいものです。

于 2009-04-23T17:52:39.383 に答える