0

ラスカルで大きな文字列を操作しようとすると、常に次のエラーが発生します。

java.lang.OutOfMemoryError: Java ヒープ領域 (内部エラー)。

eclipse.ini ファイルで次のパラメーターを変更しました。

-XX:MaxPermSize=1024m
-Xms256m 
-Xmx1024m

しかし、それは何も変わりません。

コードは次のようになります。

public str removeBB(str file){
while(contains(file, "aB")){
    index1 = findFirst(file, "aB");
    index2 = (findFirst(file, "Ba") + 2);

    subString1 = substring(file, 0, index1);
    subString2 = substring(file, index2);

    file = subString1 + subString2;
}

return file;
}

このエラーを防ぐにはどうすればよいですか? そのコードを記述してメモリ効率を高める方法はありますか?

4

1 に答える 1

1

このコードがメモリをスラッシングしている理由がすぐにはわかりません。おそらく、例の文字列で index1 よりも小さい index2 を検出したためでしょうか?

とにかく、indexOf を使用する代わりに、正規表現を使用してアクセスするようなものを記述します。

visit (file) { case /aB.*Ba/ => "" }

また、文字列のスライスには、部分文字列ではなく、より適切な構文を使用できます。

rascal>"asdlhfasldfhslf"[5..8] str: "fas"

于 2013-10-05T19:11:19.453 に答える