を読み込み、 -
で始まるコメントを削除したいのですが、私はその特定の行を削除することができます私はコードとコメントを同じ行に書いているので、 "\ n--"をしている)。
私はjarファイルに私のプログラムをエクスポートし、それは私のデスクトップで正常に動作しますが、私は私のプログラムで
のjava -Xmx256m -jar MYJARを試してみても、別のコンピュータ(別のPLSQLファイルの読み込み)で、それは私のJavaヒープ領域のエラーを与えます
の.jarエラー:
Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
Caused by: java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Unknown Source)
at java.lang.AbstractStringBuilder.expandCapacity(Unknown Source)
at java.lang.AbstractStringBuilder.ensureCapacityInternal(Unknown Source)
at java.lang.AbstractStringBuilder.append(Unknown Source)
at java.lang.StringBuffer.append(Unknown Source)
at ParserDB.ScriptNoComment(ParserDB.java:142)
at ParserDB.GetTheName(ParserDB.java:54)
at Rapport.SearchCcInDB(Rapport.java:189)
at Rapport.listDB(Rapport.java:77)
at Rapport.main(Rapport.java:472)
... 5 more
私のコードは次のとおりです。
public static String ScriptNoComment(String fileName){
String result = null ;
try{
FileInputStream fstream = new FileInputStream(fileName);
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
StringBuffer strOut = new StringBuffer();
StringBuilder Out = new StringBuilder();
String strLine;
while ((strLine = br.readLine()) != null) {
if(strLine.contains("--")){
strLine = strLine.replaceAll("--","\n--");
}
strOut.append(strLine+"\n");
}
in.close();
//delete comment
String[] lines = strOut.toString().split("\\n");
for(String s: lines){
if(s.contains("--")){
s="";
}
Out.append(s+"\n");
}
result = Out.toString();
result = result.toUpperCase();
result = result.replaceAll("\"", "");
result = result.replaceAll("\\r\\n|\\r|\\n", " ");
result = result.replaceAll("\\s+", " ");
}catch (Exception e){
System.err.println("Error: " + e.getMessage());
}
return result ;
}
は、事前に、感謝を私のコードを最適化するために、とにかくそこにある
EDIT
1 - 私はコマンドを使用して、他のコンピュータにヒープサイズをチェックする) :
のjava -XX: + PrintFlagsFinal -version | FINDSTR/I "HEAPSIZE PermSizeをThreadStackSizeは"
結果であった:分:16MとMAXSIZE:256M のではずのJava -jarテープ:-Xmx512m代わり-Xms256m
の2-) 私は(単にテストのために)stringbuilderとすべてのreplaceAllを削除しましたが、私のファイルが大きすぎるために同じエラーが発生しました。
ので、私がやったことだけ例えば50の最初の行を読んで、これだけ50行
に私の方法を適用する(ラインに応じて)私が読んでいる各ファイルの行数をカウントしてみることです
strLine = strLine.replaceAll("--","\n--");
、その後、あなたは文字列ビルダに[文字列バッファに書いている:あなたの答えあなたが使用している
多分ヒープスペースを増やすことはできますか?例えば-Xmx2g。 –
Streamアプローチを使います。テキストが大きければ、各操作は 'new String()'を割り当てるため、多くのメモリを消費します。ファイルを読むときに困っている場合は、正規表現操作でもっと大きな問題になります。 – gaborsch
このプログラムは複雑です。最後に、入力を含むStringBuffer、同じ内容の文字列配列、およびコメント以外のすべてを含むStringBuilderがあります。それは3倍のメモリ要件です。代わりに、ファイルを行単位で読み込み、行にコメント(または内容)が含まれているかどうかを確認し、存在する場合は省略/省略することができます。また、ライン上の置換えを行うこともできますので、結果には不要です。そうすることで、あなたのメモリ要件は大幅に削減されます。 –