2011-01-25 16 views
5

Javaで大きな文字列定数を処理する最適な方法は何ですか?私はむしろ、すべての行の前後に引用符とプラスを入れていないと思いますJavaで大きな文字列定数を処理する

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Body> 
     <QuoteRequest xmlns="https://www.bcponline.co.uk"> 
      <header> 
       <SourceCode>BN325</SourceCode> 
       <MessageSource>B2B3</MessageSource> 
       <Profile>B08A</Profile> 
       <Password>AP3U86V</Password> 
       <OperatorID>flightline</OperatorID> 
       <ShowWebOptions>0</ShowWebOptions> 
      </header> 
      <serviceSelection> 
       <ServiceProviderCode></ServiceProviderCode> 
       <ProductCode>CarParking</ProductCode> 
       <IATACode>lgw</IATACode> 
      </serviceSelection> 
      <quoteDetails> 
       <DepartureDate>21-Jun-2005</DepartureDate> 
       <DepartureTime>07:00</DepartureTime> 
       <ReturnDate>28-Jun-2005</ReturnDate> 
       <ReturnTime>07:00</ReturnTime> 
       <QuoteReference></QuoteReference> 
       <NoPax>1</NoPax> 
      </quoteDetails> 
      <sPostCode></sPostCode> 
     </QuoteRequest> 
    </soap:Body> 
</soap:Envelope> 

は私がSOAPのためのテスト・フィクスチャを持っていると私は次の文字列を送信することを想像してみてください。それをファイルに入れると余分なコードとなり、同じファイルにいくつかの文字列を入れるのはやや難しくなります。 XMLにはテキストをエスケープする際に問題があります(私はCDATAの醜さを使わなければなりません)。簡単な方法がありますか?

+0

お勧め: '\ n'sとして改行をエンコードする方法はありますか? –

+1

プロパティファイルに入れることができます。まだコードを書く必要がありますが、それほど多くはないので、複数の文字列を入れることができます – jny

+0

関連:http://stackoverflow.com/questions/782810/working-with-large-text-snippets-in-java-source –

答えて

-1

StringBuilderの使用についてはどうですか?

+0

引用符とプラス記号を使うよりも難しいですね。少なくとも、コンピュータが処理する方が速いでしょう。 – User1

+1

@ User1 - それは高速ではありません。小さな文字列がクラスファイルにあります。これは、あらかじめアセンブルされた文字列全体をコンパイルするのではなく、実行時にアセンブルする必要があります。 –

3

文字列が無関係な場合は、ファイルが大量であっても別のファイルに置くことができます(問題は何ですか?)。

1つのファイルを主張する場合は、一意の区切り文字を指定することができますが、特定のエントリにランダムにアクセスしようとすると価格を支払うことになります。

データファイルは、ほとんどの場合、コードにハードコードされるのではなく、必要に応じて(別のディレクトリにある可能性がある)外部化され、読み込まれる必要があります。よりクリーンで、コードサイズが小さくなり、コンパイルの必要性が減り、複数のテストに同じデータファイルを使用できます。ほとんどのテストフィクスチャとビルドツールと統合ツールは外部ファイルをサポートしています。

または、引数からSOAPをビルドするコードやビルダーを書くことができます。実行時のコストを支払う場合は、これをもっと簡潔にすることができます。 (訂正:あなたのサンプルを変更したのを見て、これは自動生成するのは面倒です)。

+0

* 1つのファイルを主張すると、デリミタ* - 空の行をデリミタとして使用していますが、読みやすいです。 *しかし、あなたはランダムに特定のエントリにアクセスしようとすると価格を支払うことになります。* - これは決して起こらない、彼はプログラムに入れようと考えていたので、確かにサイズがGBではないので、メモリ内にある。 – maaartinus

+0

@maaartinus:空の行を空白として許可する形式では、空の行を区切り記号として使用することには非常に注意が必要です(これは正しいですか?)。それは1つのマージエラーまたは不注意なカットペーストが物事を混乱させる。 – Uri

+0

確かに、私は注意しています:実際には、私の形式では、 "段落"の最初の行はその名前です。私はすべての名前にenumを使用します。私がそれを台無しにする場合は、名前が見つからないか、そのようなものがあります。欠落、重複、または不明な名前があると、ロード中に例外が発生します。 – maaartinus

関連する問題