0

行ごとにデータを読み取る必要がある「テキスト」ファイルがあります。ファイルには約 1330 行が含まれています。各行 (文字列) を読み取り、データベースにデータとして挿入される部分文字列に分割する必要があります。

  • ファイルから行ごとにデータを読み取ることができます。
  • データベースにデータを挿入することもできます。

分割する必要がある文字列の長さは、約 2750 文字です。この文字列を分割する 1 つのオプションは、'substring(start, end)' メソッドを使用することです。ただし、行には2750文字があるため、分割された文字列の数は約200〜225と膨大になります(特定の文字の長さがXmlのどの文字列になるかを示唆するマッピングがあります)。

誰かがこれらの文字列を分割する他の手法を提案できますか?

4

3 に答える 3

3

あなたの数値を考えると、あなたの最初のアプローチは、標準の JVM メモリの制約内に十分収まると思います。

相変わらず、時期尚早の最適化は諸悪の根源です。私は単純な分割を試み、問題があればそれを改善することを検討します. 2700 文字の行に 200 個の文字列があれば問題ないと思います。

オブジェクトがflyweight パターンStringを実装していることに注意してください。つまり、文字列を複製するのではなく、元の のデータ (char 配列) をウィンドウで報告するだけです。したがって、使用する実装は、余分なメモリをほとんど使用しません (それだけの価値があります)。substring()Stringsubstring()

于 2012-08-16T10:11:19.343 に答える
0

split()クラスのメソッドを使用Stringして文字列を分割できますが、その文字列を分割するには、カンマ、ダッシュなどの区切り文字が必要です。その区切り文字を使用して、文字列を分割できます。

String str = "one-two-three";
String[] temp;

/* delimiter */
String delimiter = "-";
/* given string will be split by the argument delimiter provided. */
temp = str.split(delimiter);
于 2012-08-16T10:09:49.643 に答える
0

すでに開始/終了が定義されており、文字列を解析する必要さえないように思われるため、部分文字列呼び出しがおそらく最速の方法です。部分文字列のルックアップは、配列インデックス、メモリ内のアドレスにヒットするため、ルックアップはおそらく O(1) です...そして、Java が必要な特定の文字列をコピーする可能性がありますが、それはとにかく発生する必要があり、オーバーラップがない場合、すべての部分文字列に対しても O(n) 。

substring は実際には基になる文字列を変更しません。各呼び出しで探している関連部分をコピーするだけです (それを行う場合でも、理論的には、カプセル化された一種の String を返すことが可能です)。元の文字列)。実際のパフォーマンスの問題を特定していない限り、最も単純な解決策が最善の解決策です。

たとえば、コンマで分割する必要がある場合は、CSVReader ライブラリを使用します。

于 2012-08-16T10:17:32.247 に答える