2011-07-26 13 views
5

フォームを印刷するのに間違った厄介な解決策の1つとして、MS-Word文書をXMLとして保存しましたが、そのXMLをGroovy文字列として保存しようとしています$ {fillOutTheFormProgrammatically}Groovyが私のUnicode文字列が長すぎると言っています

しかし、MS-Word文書のサイズが大きいので、文字列は113100のUnicode文字で、Groovyは65536に制限されています。これを変更する方法はありますか?文字列を分割してスタック?私がやろうとしているものだ

Groovy - need to make a printable form

更新:Groovy Stringの長すぎることを明確にするために、私は普通の文字列がすべて良いと思います。戦略を変えてファイルにいくつかの文字列を入れると、%!%variable_name%!%のように簡単に見つけて、次に.replace(...私はここに新しい質問が出てきます...

答えて

5

あなたは直接この文字列を埋め込みますあなたのグルーヴィーコード? jvm自体には、文字列定数の長さに制限があります。詳細については、VM Specを参照してください。

文字列を小さな部分に分割し、実行時にそれらを連結するのが醜い回避策かもしれません。より良い解決策は、テキストを外部ファイルに保存し、コードから内容を読み取ることです。このファイルをコードと共にパッケージ化し、Class#getResourceAsStreamを使用してクラスパスからアクセスすることもできます。

+0

ファイルにテキストを保存してから、それを読んでみてください。ありがとう! – MeIr

0

例外あなたが取得している?私はそれは基本的にJavaの文字列であるとして、Groovyの文字列は、65536に制限されているとは思わない。あなたがどこかに再帰しようと65536コールスタックの制限に達しているよう

は私にね。

しかし、100K +の文字をメモリに一度に読み込むと、過度のように見えます。

なぜ、SAXパーサーを使ってXMLを解析しないのですか?結果を得るためにimilar? (私はあなただけの小さなセクションをしたいと仮定)

か、なぜあなたがして起動する必要があるデータではなく、XMLの文字の数千人のhunderdsに頼らを保存しない

+0

固定コールスタック制限がありますか?ソース? –

+1

@Michael Yeah、最大再構築の深さはスタックサイズに設定されています(javaの '-Xss'パラメータはデフォルトを変更できます)...実際、私は間違っていました。デフォルトでは65536以上です://www.oracle.com/technetwork/java/hotspotfaq-138619.html#threads_oom) –

関連する問題