(57)【要約】【課題】記憶部の記憶容量を縮小する文字列操作方法、プログラム、および、情報処理装置を提供すること。【解決手段】情報処理装置１は、文字列を操作する。この情報処理装置１は、複数の文字データで構成される文字列を複数含む文字列群を記憶する記憶部３０と、文字列群の中から特定文字列を参照する参照部４１と、文字列群の中から特定文字列として参照されない文字データを検出する文字データ検出部４２２と、文字列群から検出した文字データを削除する文字データ削除部４２３と、を備える。【選択図】図１
2007183905.tif 000002
【特許請求の範囲】
【請求項１】
Ｊａｖａ（登録商標）プログラムに基づいて動作し、複数のcharデータで構成されるchar配列オブジェクト群について記憶する記憶部を備える情報処理装置において、前記char配列を操作する文字列操作方法であって、
前記char配列オブジェクト群の中からStringオブジェクトの文字列を参照する手順と、
ガベージ・コレクションを行う際に、前記char配列オブジェクト群の中から所定のcharデータおよびchar配列オブジェクトを削除する手順と、を含むことを特徴とする文字列操作方法。
【請求項２】
複数の文字データで構成される文字列を複数含む文字列群について記憶する記憶部を備える情報処理装置において、前記文字列を操作する文字列操作方法であって、
前記文字列群の中から特定文字列を参照する手順と、
前記文字列群の中から前記特定文字列として参照されない文字データを検出する手順と、
前記文字列群から前記検出した文字データを削除する手順と、を含むことを特徴とする文字列操作方法。
【請求項３】
複数の文字データで構成される文字列を複数含む文字列群について記憶する記憶部を備える情報処理装置において、前記文字列を操作する文字列操作方法であって、
前記文字列群の中から特定文字列を参照する手順と、
前記複数の文字データに応じて、前記複数の文字列を並べ替える手順と、
前記並べ替えた複数の文字列を含む文字列群の中から、第１の文字列、および、前記第１の文字列と同一である第２の文字列を検出する手順と、
前記並べ替えた複数の文字列を含む文字列群から前記第２の文字列を削除する手順と、を含むことを特徴とする文字列操作方法。
【請求項４】
複数の文字データで構成される文字列を複数含む文字列群について記憶する記憶部を備える情報処理装置において、前記文字列を操作する文字列操作方法であって、
前記文字列群の中から特定文字列を参照する手順と、
前記文字列群の中から、第１の文字列、および、前記第１の文字列の一部と同一である第２の文字列を検出する手順と、
前記文字列群から前記第２の文字列を削除する手順と、を含むことを特徴とする文字列操作方法。
【請求項５】
複数の文字データで構成される文字列を複数含む文字列群について記憶する記憶部を備える情報処理装置において、前記文字列を操作する文字列操作方法であって、
前記文字列群の中から特定文字列を参照する手順と、
前記文字列群の中から、第１の文字列、および、前記第１の文字列の最後の文字データを含む後部文字列を最初の文字データを含む前部文字列とする第２の文字列を検出する手順と、
前記文字列群で、前記後部文字列および前記前部文字列を１つにまとめて、前記第１の文字列および前記第２の文字列を連結する手順と、を含むことを特徴とする文字列操作方法。
【請求項６】
複数の文字データで構成される文字列を複数含む文字列群について記憶する記憶部を備えるコンピュータに前記文字列の操作を実行させるコンピュータ・プログラムであって、前記コンピュータに、
前記文字列群の中から特定文字列を参照するステップと、
前記文字列群の中から前記特定文字列として参照されない文字データを検出するステップと、
前記文字列群から前記検出した文字データを削除するステップと、を実行させるコンピュータ・プログラム。
【請求項７】
請求項６に記載のコンピュータ・プログラムであって、前記コンピュータに、
前記検出するステップ、および、前記削除するステップに代えて、
前記複数の文字データに応じて、前記複数の文字列を並べ替えるステップと、
前記並べ替えた複数の文字列を含む文字列群の中から、第１の文字列、および、前記第１の文字列と同一である第２の文字列を検出するステップと、
前記並べ替えた複数の文字列を含む文字列群から前記第２の文字列を削除するステップと、を実行させるコンピュータ・プログラム。
【請求項８】
請求項７に記載のコンピュータ・プログラムであって、前記コンピュータに、
前記検出するステップに代えて、
前記文字列群の中から、第１の文字列、および、前記第１の文字列の一部である第２の文字列を検出するステップと、を実行させるコンピュータ・プログラム。
【請求項９】
請求項７に記載のコンピュータ・プログラムであって、前記コンピュータに、
前記検出するステップ、および、前記削除するステップに代えて、
前記文字列群の中から、第１の文字列、および、前記第１の文字列の最後の文字データを含む後部文字列を最初の文字データを含む前部文字列とする第２の文字列を検出するステップと、
前記文字列群で、前記後部文字列および前記前部文字列を１つにまとめて、前記第１の文字列および前記第２の文字列を連結するステップと、を実行させるコンピュータ・プログラム。
【請求項１０】
複数の文字データで構成される文字列を複数含む文字列群について記憶する記憶部を有し、前記文字列を操作する情報処理装置であって、
前記文字列群の中から特定文字列を参照する参照部と、
前記文字列群の中から前記特定文字列として参照されない文字データを検出する第１の検出部と、
前記文字列群から前記検出した文字データを削除する第１の削除部と、を備えることを特徴とする情報処理装置。
【請求項１１】
請求項１０に記載の情報処理装置であって、
前記第１の検出部および第１の削除部に代えて、
前記複数の文字データに応じて、前記複数の文字列を並べ替える整列部と、
前記並べ替えた複数の文字列を含む文字列群の中から、第１の文字列、および、前記第１の文字列と同一である第２の文字列を検出する第２の検出部と、
前記並べ替えた複数の文字列を含む文字列群から前記第２の文字列を削除する第２の削除部と、を備えることを特徴とする情報処理装置。
【請求項１２】
請求項１１に記載の情報処理装置であって、
前記第２の検出部に代えて、
前記文字列群の中から、第１の文字列、および、前記第１の文字列の一部である第２の文字列を検出する第３の検出部と、を備えることを特徴とする情報処理装置。
【請求項１３】
請求項１１に記載の情報処理装置であって、
前記第２の検出部および前記第２の削除部に代えて、
前記文字列群の中から、第１の文字列、および、前記第１の文字列の最後の文字データを含む後部文字列を最初の文字データを含む前部文字列とする第２の文字列を検出する第４の検出部と、
前記文字列群で、前記後部文字列および前記前部文字列を１つにまとめて、前記第１の文字列および前記第２の文字列を連結する連結部と、を備えることを特徴とする情報処理装置。
【請求項１４】
請求項６乃至９に記載のコンピュータ・プログラムを記録する記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、文字列を操作する方法、プログラム、および、情報処理装置に関する。
【背景技術】
【０００２】
従来より、情報処理装置であるコンピュータは、Ｃ言語やＪａｖａ（登録商標）言語といったプログラミング言語で書かれたプログラムに基づいて動作する。このコンピュータは、演算に用いる数値や文字列（ストリング）といったデータを記憶部としてのメモリに記憶する。
【０００３】
例えば、オブジェクト指向言語であるＪａｖａ（登録商標）言語で書かれたＪａｖａ（登録商標）プログラムに基づいて動作するコンピュータでは、プログラマが指定することなく、不要となったデータを記憶しているメモリのメモリ領域を自動的に解放するガベージ・コレクション（以下、ＧＣと呼ぶ）が用いられている（例えば、特許文献１参照）。特許文献１に記載のＧＣによれば、メモリを、ライフタイムの比較的短い第１の種類のデータ群を記憶する第１のメモリ領域と、ライフタイムの比較的長い第２の種類のデータ群を記憶する第２のメモリ領域と、に分割し、第１のメモリ領域に対するＧＣの実行頻度を高くするとともに、第２のメモリ領域に対するＧＣの実行頻度を低くする。このため、データの特性を考慮に入れつつＧＣ対象となるメモリ領域を限定して、効率的にメモリ領域を解放できる。
【０００４】
以上のように、Ｊａｖａ（登録商標）プログラムに基づいて動作するコンピュータでは、ＧＣを行ってメモリ領域を解放することで、コンピュータが用いるメモリのメモリ容量を縮小する。
【特許文献１】特開２００２−２７８８２８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
上述のＪａｖａ（登録商標）プログラムの実行環境の典型的な実装では、Stringオブジェクトの表す文字列は、char配列オブジェクトの中から参照される。このchar配列オブジェクトは、以下の２つの特徴を備えている。
【０００６】
第１の特徴として、char配列オブジェクトは、Stringオブジェクトの文字列として参照されないcharデータを含む場合がある。この場合、もしそのchar配列オブジェクトがStringオブジェクト以外から参照されていないのなら、Stringオブジェクトの文字列として参照されないcharデータを記憶しているメモリ領域を解放して、コンピュータが用いるメモリのメモリ容量を縮小することが望ましい。
【０００７】
第２の特徴として、同じ文字列データを持つchar配列オブジェクトが複数存在している場合がある。Ｊａｖａ（登録商標）においてはStringオブジェクトの文字列は操作不能であり、上述の場合、２つの同一のchar配列オブジェクトをひとつにまとめ、片方を記憶しているメモリ領域を解放して、コンピュータが用いるメモリのメモリ容量を縮小することが望ましい。
【０００８】
しかしながら、Ｊａｖａ（登録商標）プログラムに基づいて動作するコンピュータにおいて、特許文献１に記載のものをはじめとする従来のＧＣでは、char配列オブジェクト群の中から、上述の参照されないcharデータや、上述の重複するchar配列オブジェクトを検出できず、これらを記憶しているメモリ領域を解放できない。このため、コンピュータが用いるメモリのメモリ容量を十分に縮小できない場合があり、問題であった。
【０００９】
本発明の目的は、記憶部の記憶容量を縮小する文字列操作方法、プログラム、および、情報処理装置を提供することである。
【課題を解決するための手段】
【００１０】
本発明の第１の形態によると、Ｊａｖａ（登録商標）プログラムに基づいて動作し、複数のcharデータで構成されるchar配列オブジェクト群について記憶する記憶部を備える情報処理装置において、char配列を操作する文字列操作方法であって、char配列オブジェクト群の中からStringオブジェクトの文字列を参照する手順と、ガベージ・コレクションを行う際に、char配列オブジェクト群の中から所定のcharデータおよびchar配列オブジェクトを削除する手順と、を含むことを特徴とする文字列操作方法を提供する。
【００１１】
本発明の第２の形態によると、複数の文字データで構成される文字列を複数含む文字列群について記憶する記憶部を備える情報処理装置において、文字列を操作する文字列操作方法であって、文字列群の中から特定文字列を参照する手順と、文字列群の中から特定文字列として参照されない文字データを検出する手順と、文字列群から検出した文字データを削除する手順と、を含む文字列操作方法を提供する。
【００１２】
本発明の第３の形態によると、複数の文字データで構成される文字列を複数含む文字列群について記憶する記憶部を備える情報処理装置において、文字列を操作する文字列操作方法であって、文字列群の中から特定文字列を参照する手順と、複数の文字データに応じて、複数の文字列を並べ替える手順と、並べ替えた複数の文字列を含む文字列群の中から、第１の文字列、および、第１の文字列と同一である第２の文字列を検出する手順と、並べ替えた複数の文字列を含む文字列群から第２の文字列を削除する手順と、を含む文字列操作方法を提供する。
【００１３】
本発明の第４の形態によると、複数の文字データで構成される文字列を複数含む文字列群について記憶する記憶部を備える情報処理装置において、文字列を操作する文字列操作方法であって、文字列群の中から特定文字列を参照する手順と、文字列群の中から、第１の文字列、および、第１の文字列の一部と同一である第２の文字列を検出する手順と、文字列群から第２の文字列を削除する手順と、を含む文字列操作方法を提供する。
【００１４】
本発明の第５の形態によると、複数の文字データで構成される文字列を複数含む文字列群について記憶する記憶部を備える情報処理装置において、文字列を操作する文字列操作方法であって、文字列群の中から特定文字列を参照する手順と、文字列群の中から、第１の文字列、および、第１の文字列の最後の文字データを含む後部文字列を最初の文字データを含む前部文字列とする第２の文字列を検出する手順と、文字列群で、後部文字列および前部文字列を１つにまとめて、第１の文字列および第２の文字列を連結する手順と、を含む文字列操作方法を提供する。
【発明の効果】
【００１５】
本発明によれば、文字列群の中から、参照されない文字データや、重複する文字列を検出して削除することにより、これらを記憶している記憶領域を解放する。このため、char配列オブジェクト群の中から、参照されないcharデータや、重複するchar配列を検出して削除することにより、これらを記憶しているメモリ領域を解放できる。したがって、情報処理装置が用いる記憶部の記憶容量を縮小できる。
【発明を実施するための最良の形態】
【００１６】
以下、本発明の実施形態を図面に基づいて説明する。なお、以下の実施形態の説明にあたって、同一構成要件については同一符号を付し、その説明を省略もしくは簡略化する。
【００１７】
＜１．第１実施形態＞
図１は、本発明の第１実施形態に係る情報処理装置１の機能ブロック図である。情報処理装置１は、情報処理を行う装置であり、コンピュータであってよい。また、情報処理装置１が、本発明のプログラムを実行されることで、本発明の効果を実現してもよい。情報処理装置１は、ユーザからの入力を受け付ける入力部１０と、演算結果を出力する出力部２０と、複数のcharデータで構成されるchar配列オブジェクト群について記憶する記憶部３０と、情報を演算する制御部４０と、を備えている。この情報処理装置１は、記憶部３０に記憶しているchar配列オブジェクト群の中から、Stringオブジェクトの表す文字列を参照するとともに、Stringオブジェクトの文字列として参照されないcharデータを検出し、この検出したcharデータをchar配列オブジェクト群の中から削除する。
【００１８】
入力部１０は、ユーザからの入力を受け付けて、入力された情報を制御部４０に伝える。この入力部１０は、例えば、キーボードやマウス等であってよい。
【００１９】
出力部２０は、情報処理装置１の演算処理結果を出力する。この出力部２０は、例えば、ＣＲＴディスプレイや液晶ディスプレイ等であってよい。
【００２０】
記憶部３０は、ＯＳ（Operating  System）、ミドルウェア、アプリケーション等を記憶するとともに、文字列群としてのchar配列オブジェクトを記憶する。この記憶部３０は、コンピュータのメモリであってよい。
【００２１】
図２は、記憶部３０に記憶するchar配列オブジェクト群CHARSの模式図である。char配列オブジェクト群CHARSには、複数のchar配列オブジェクトch_A[]、ch_B[]、ch_C[]、ch_D[]、ch_E[]が含まれている。char配列オブジェクトch_A[]〜ch_E[]は、それぞれ、ヘッダ部headerを備えている。
【００２２】
char配列オブジェクトch_A[]〜ch_E[]のヘッダ部headerは、情報処理装置１が内部的に用いる、各オブジェクトごとの情報を保持するための場所であり、これらのオブジェクトがchar配列であることを表すとともに、それぞれ、char配列オブジェクトch_A[]〜ch_E[]のサイズなどを記憶している。例えば、char配列オブジェクトch_A[]のヘッダ部headerは、サイズ情報として“１６”を記憶している。
【００２３】
char配列オブジェクトch_A[]は、文字データとしてのcharデータch_A[0]〜ch_A[15]を備えている。char配列オブジェクトch_B[]〜ch_E[]についても同様に、それぞれ、charデータch_B[0]〜ch_B[13]、ch_C[0]〜ch_C[6]、ch_D[0]〜ch_D[10]、ch_E[0]〜ch_E[12]を備えている。例えば、char配列オブジェクトch_B[]のcharデータch_B[8]は、“a”である。
【００２４】
図１に戻って、制御部４０は、演算、制御等を行う中央処理装置であり、ＣＰＵ（Central  Processing  Unit）であってよい。この制御部４０は、参照部４１および削除部４２を備えている。
【００２５】
参照部４１は、char配列オブジェクト群の中から特定文字列としてのStringオブジェクトの文字列を参照する。
【００２６】
図３は、後述する削除部４２で文字列操作を行う前のStringオブジェクトst_Aの文字列およびchar配列オブジェクトch_A[]の関係を示す模式図である。図４は、後述する削除部４２で文字列操作を行った後のStringオブジェクトst_Aの文字列およびchar配列オブジェクトch_A[]の関係を示す模式図である。
【００２７】
図３に示すように、Stringオブジェクトst_Aの文字列は、charデータch_A[4]〜ch_A[13]の“importance”を参照している。このStringオブジェクトst_Aは、ヘッダ部headerと、データ部dataと、開始部startと、文字数部lengthと、を備えている。
【００２８】
Stringオブジェクトのヘッダ部headerは、このオブジェクトがStringオブジェクトであることなどを表す。
【００２９】
Stringオブジェクトのデータ部dataは、１つのchar配列オブジェクトを指す。具体的には、Stringオブジェクトst_Aのデータ部dataは、Stringオブジェクトst_Aの文字列“importance”を含むchar配列オブジェクトch_A[]を表す。Stringオブジェクトの表す文字列は、このchar配列オブジェクトの一部であり、残る２つの値でその位置が示される。
【００３０】
Stringオブジェクトの開始部startは、Stringオブジェクトの文字列を含むchar配列オブジェクトにおいて、Stringオブジェクトの文字列として参照を開始する位置を表す。具体的には、Stringオブジェクトst_Aの開始部startは、“４”である。
【００３１】
Stringオブジェクトの文字数部lengthは、Stringオブジェクトの文字列を含むchar配列オブジェクトにおいて、Stringオブジェクトの文字列として参照するcharデータの数を表す。具体的には、Stringオブジェクトst_Aの文字数部lengthは、charデータch_A[4]〜ch_A[13]の“１０”を表す。
【００３２】
なお、段落番号００２９〜００３１は、char配列オブジェクトのcharデータの一部分がStringオブジェクトの表す文字列であることがわかるようにできれば、これ以外の実装であってもよい。例えば、lengthの値を保持する代わりに参照する最後のcharデータのインデックス値（st_Aの場合だと、“１３”）を保持するのでもよい。
【００３３】
図１に戻って、削除部４２は、char配列オブジェクトの中から、Stringオブジェクトの文字列として参照しないcharデータを削除する。この削除部４２は、リスト作成部４２１と、文字データ検出部４２２と、文字データ削除部４２３と、文字列再編成部４２４と、を備えている。
【００３４】
リスト作成部４２１は、記憶部３０内の各char配列がどのオブジェクトから参照されているかを調べ上げ、charデータのうちStringオブジェクトの表す文字列として使用されているものに印をつけ、char配列ごとの一覧表にまとめる。例えば、図３では、一覧表のchar配列オブジェクトch_A[]の部分には、Stringオブジェクトの表す文字列として使用されているcharデータがch_A[4]〜ch_A[13]の“importance”であることと、char配列オブジェクトch_A[]を参照しているStringオブジェクトがst_Aであることと、が記録される。
【００３５】
なお、char配列オブジェクトがStringオブジェクト以外から参照されていた場合、そのchar配列オブジェクトを変形することはできないので、一覧表からは取り除いてよい。
【００３６】
文字データ検出部４２２は、上述の一覧表に基づいて、char配列オブジェクトの中からStringオブジェクトの文字列として参照されないcharデータを検出する。例えば、図３では、char配列オブジェクト群CHARSのchar配列オブジェクトch_A[]の中から、Stringオブジェクトst_Aの文字列“importance”として参照されないcharデータch_A[0]〜ch_A[3]と、charデータch_A[14]〜ch_A[15]と、を検出する。
【００３７】
文字データ削除部４２３は、char配列オブジェクトの中から、上述の検出したcharデータを削除する。例えば、図３では、文字データ検出部４２２が検出した、charデータch_A[0]〜ch_A[3]と、charデータch_A[14]〜ch_A[15]と、を削除して、図４のようにchar配列オブジェクトch_A[]を変更する。これにより、char配列オブジェクトch_A[]のサイズは、“１６”から“１０”となり、char配列オブジェクトch_A[]が使用する記憶部３０の記憶領域は、削減される。
【００３８】
文字列再編成部４２４は、文字データ削除部４２３でcharデータを削除したことに基づいて、char配列オブジェクトを作り直し、Stringオブジェクトを再編成する。例えば、図３では、char配列オブジェクトch_A[]のヘッダ部headerを、“１０”を表すように作り直すとともに、図４のように、Stringオブジェクトst_Aのデータ部dataを、作り直されたchar配列オブジェクトch_A[]を参照するように修正し、開始部startを、charデータch_A[0]を表すように“０”に変更する。
【００３９】
以上の情報処理装置１の動作について、図５に基づいて説明する。最初に、ステップＳ２０１では、Stringオブジェクトの文字列の参照を要求されているか否かを判別する。ステップＳ２０１の判別が“Ｙｅｓ”の場合、ステップＳ２０２に移る。ステップＳ２０１の判別が“Ｎｏ”の場合、ステップＳ２０３に移る。ステップＳ２０２では、char配列オブジェクトの中からStringオブジェクトの文字列を参照する。
【００４０】
ステップＳ２０３では、char配列オブジェクトの中から、Stringオブジェクトの文字列として参照されないcharデータの削除を要求されているか否かを判別する。ステップＳ２０３の判別が“Ｙｅｓ”の場合、ステップＳ３０１に移る。ステップＳ２０３の判別が“Ｎｏ”の場合、ステップＳ２０１に戻る。
【００４１】
ステップＳ３０１では、char配列ごとに、Stringオブジェクトの文字列として使用されているcharデータ群と、そのchar配列を参照しているStringオブジェクト群と、を調べて一覧表にまとめ、ステップＳ３０２に移る。なお、char配列オブジェクトがStringオブジェクト以外から参照されていた場合、そのchar配列オブジェクトは一覧表に含まれず以降の処理対象からは外される。
【００４２】
ステップＳ３０２では、ステップＳ３０１でまとめた一覧表に基づいて、char配列オブジェクトの中から、Stringオブジェクトの文字列として参照されないcharデータを検出し、ステップＳ３０３に移る。
【００４３】
ステップＳ３０３では、char配列オブジェクトの中からステップＳ３０２で検出したcharデータを削除してchar配列オブジェクトを作り直し、ステップＳ３０４に移る。ステップＳ３０４では、Stringオブジェクトを再編成する。
【００４４】
以上に説明したように、本実施形態に係る情報処理装置１は、参照部４１を備えているので、記憶部３０に記憶しているchar配列オブジェクトの中からStringオブジェクトの文字列を参照することが可能である。また、情報処理装置１は、削除部４２を備えているので、記憶部３０に記憶しているchar配列オブジェクトの中からStringオブジェクトの文字列として参照されないcharデータを検出して、この検出したcharデータを削除できる。このため、Stringオブジェクトの文字列として参照されないcharデータをchar配列オブジェクトから削除して、記憶部３０の記憶容量を縮小することが可能である。
【００４５】
なお、ＧＣでは、複数のオブジェクト同士の参照関係をまとめたマークテーブルを作成し、このマークテーブルに基づいて、いずれのオブジェクトからも参照されないオブジェクトを検出する場合がある。この処理の際に、Stringオブジェクトの文字列として参照されるcharデータを調査することで、ステップＳ３０１の一覧表の作成を効率よく行うことが可能である。
【００４６】
また、ＧＣでは、回収されなかったオブジェクトを稼働させるために、そのオブジェクトを参照しているオブジェクト群を検索することができる仕組みを備えているのが通常である。これにはリバース・ポインタ・チェーシングなどの手法がある。ステップＳ３０１で作る一覧表において、char配列オブジェクトを参照しているStringオブジェクト群を記録する機構は、この仕組みを流用し効率的に行うことが可能である。
【００４７】
また、上述のステップＳ３０１〜Ｓ３０４の、char配列オブジェクトからStringオブジェクトの文字列として参照されないcharデータを削除するための一連のステップは、全てのchar配列オブジェクトに対して一斉に行ってもよいし、各char配列オブジェクトごとに別々に行ってもよい。すなわち、上述の一連のステップは、各char配列オブジェクトに対して、独立に行うことができる。
【００４８】
また、上述のリスト作成部４２１で作成する一覧表について、char配列ごとの使用されているcharデータ群の情報は、そのchar配列オブジェクトのcharデータのうち、最初のcharデータのインデックス値および最後のcharデータのインデックス値のみに簡略化してもよい。これによれば、途中に使用されないcharデータがあっても削除できない反面、一覧表にまとめるデータ量が減るので、この一覧表を記憶するための記憶容量を縮小することが可能である。
【００４９】
＜２．第２実施形態＞
図６は、本発明の第２実施形態に係る情報処理装置１Ａの機能ブロック図である。情報処理装置１Ａは、制御部の構成が図１の情報処理装置１と異なる。この情報処理装置１Ａは、記憶部３０に記憶しているchar配列オブジェクトの中から、Stringオブジェクトの文字列を参照するとともに、第１の文字列と、第１の文字列と同一である第２の文字列と、を検出し、第２の文字列を構成するchar配列オブジェクトを削除する。
【００５０】
情報処理装置１Ａの有する制御部４０Ａは、参照部４１および削除部４２Ａを備えている。削除部４２Ａは、文字列整列部４２５と、文字列検出部４２６と、文字列削除部４２７と、文字列再編成部４２４Ａと、を備えている。
【００５１】
図７は、削除部４２Ａで文字列操作を行う前のStringオブジェクトst_E、st_Fの文字列と、char配列オブジェクトch_A[]、ch_B[]と、の関係を示す模式図である。図８は、削除部４２Ａで文字列操作を行った後のStringオブジェクトst_E、st_Fの文字列と、char配列オブジェクトch_A[]と、の関係を示す模式図である。
【００５２】
図６に戻って、文字列整列部４２５は、char配列オブジェクトのStringオブジェクトの文字列として使われている部分のデータに応じて、char配列を並べた一覧表を作る。例えば、複数のchar配列を、各char配列を構成するcharデータに応じて、昇順に並べる。
【００５３】
文字列検出部４２６は、char配列オブジェクト群の中から、第１の文字列と、第１の文字列と同一である第２の文字列と、を検出する。例えば、図７では、char配列オブジェクト群CHARSの中から、第１の文字列としてのchar配列オブジェクトch_A[]の文字列“importance”と、第２の文字列としてのchar配列オブジェクトch_B[]の文字列“importance”と、を検出する。なお、同一の文字列を複数検出した場合には、複数の同一の文字列のうちの１つを第１の文字列とし、複数の同一の文字列のうち第１の文字列を除くものを第２の文字列とする。例えば、同一の文字列を４つ検出した場合、４つの同一の文字列のうちの１つを第１の文字列とし、４つの同一の文字列のうち第１の文字列を除く３つを第２の文字列とする。
【００５４】
文字列削除部４２７は、char配列オブジェクト群の中から、上述の第２の文字列を含むchar配列オブジェクトを削除する。例えば、図７では、同一の文字列“importance”について、第２の文字列としてのchar配列オブジェクトch_B[]を削除する。
【００５５】
文字列再編成部４２４Ａは、文字列削除部４２７で第２の文字列を削除したことに基づいて、Stringオブジェクトを再編成する。例えば、図７では、Stringオブジェクトst_Fのデータ部dataを、図８のように、char配列オブジェクトch_A[]を参照するように修正し、開始部startを、図８のように、char配列オブジェクトch_A[]のcharデータch_A[4]を表すように“４”に変更する。
【００５６】
以上の情報処理装置１Ａの動作について、図９に基づいて説明する。ステップＳ４０１では、Stringオブジェクトから使用されているcharデータに応じて、char配列を並べ替えた一覧表を作り、ステップＳ４０２に移る。ステップＳ４０２では、複数のchar配列オブジェクトの中から、第１の文字列と、第１の文字列と同一である第２の文字列と、を検出し、ステップＳ４０３に移る。なお、ステップＳ４０１で、charデータに応じて、char配列を並べ替えた一覧表を作っているので、char配列を並べていない場合と比べて、第１の文字列および第２の文字列を検出しやすい。
【００５７】
ステップＳ４０３では、char配列オブジェクト群の中から第２の文字列を含むchar配列オブジェクトを削除し、ステップＳ４０４に移る。ステップＳ４０４では、Stringオブジェクトを再編成する。
【００５８】
なお、ステップＳ４０３で第２の文字列を含むchar配列オブジェクトの削除を行わず、Ｓ４０４でのStringオブジェクトの再編成だけを行ってもよい。これにより第２の文字列を含むchar配列オブジェクトを参照するオブジェクトが無くなるので、このオブジェクトは従来のＧＣによっても回収可能となる。
【００５９】
以上に説明したように、本実施形態に係る情報処理装置１Ａは、削除部４２Ａを備えているので、記憶部３０に記憶しているchar配列オブジェクト群の中から、第１の文字列と、第１の文字列と同一である第２の文字列と、を検出して、第２の文字列を含むchar配列オブジェクトを削除できる。このため、重複する文字列を減少させて、記憶部３０の記憶容量を縮小することが可能である。
【００６０】
＜３．第３実施形態＞
図１０は、本発明の第３実施形態に係る情報処理装置１Ｂの機能ブロック図である。情報処理装置１Ｂは、文字列検出部の機能が図６の情報処理装置１Ａと異なる。この情報処理装置１Ｂは、記憶部３０に記憶しているchar配列オブジェクト群の中から、Stringオブジェクトの文字列を参照するとともに、第１の文字列と、第１の文字列の一部と同一である第２の文字列と、を検出し、第２の文字列を削除する。
【００６１】
情報処理装置１Ｂの有する制御部４０Ｂは、参照部４１および削除部４２Ｂを備えている。削除部４２Ｂは、文字列検出部４２６Ａと、文字列削除部４２７と、文字列再編成部４２４Ａと、を備えている。
【００６２】
図１１は、削除部４２Ｂで文字列操作を行う前のStringオブジェクトst_G、st_Hの文字列と、char配列オブジェクトch_A[]、ch_C[]と、の関係を示す模式図である。図１２は、削除部４２Ｂで文字列操作を行った後のStringオブジェクトst_G、st_Hの文字列と、char配列オブジェクトch_A[]と、の関係を示す模式図である。
【００６３】
図１０に戻って、文字列検出部４２６Ａは、char配列オブジェクトの中から、第１の文字列と、第１の文字列の一部と同一である第２の文字列と、を検出する。例えば、図１１では、char配列オブジェクト群CHARSの中から、第１の文字列としてのchar配列オブジェクトch_A[]の文字列“importance”と、第２の文字列としてのchar配列オブジェクトch_C[]の文字列“port”と、を検出する。
【００６４】
文字列削除部４２７は、上述の第２の文字列を削除する。例えば、図１１では、第２の文字列としてのchar配列オブジェクトch_C[]を削除する。
【００６５】
文字列再編成部４２４Ａは、文字列削除部４２７で第２の文字列を削除したことに基づいて、Stringオブジェクトを再編成する。例えば、図１１では、Stringオブジェクトst_Hのデータ部dataを、図１２のように、char配列オブジェクトch_A[]を参照するように修正し、開始部startを、図１２のように、char配列オブジェクトch_A[]のcharデータch_A[6]を表すように“６”に変更する。
【００６６】
以上の情報処理装置１Ｂの動作について、図１３に基づいて説明する。ステップＳ５０１では、char配列ごとに、Stringオブジェクトから使用されている文字列と、そのchar配列を参照しているStringオブジェクト群を示した一覧表を作り、ステップＳ５０２に移る。ステップＳ５０２では、一覧表のchar配列オブジェクト群の中から、第１の文字列と、第１の文字列の一部と同一である第２の文字列と、を検出し、ステップＳ５０３に移る。
【００６７】
ステップＳ５０３では、char配列オブジェクト群の中から第２の文字列を含むchar配列オブジェクトを削除し、ステップＳ５０４に移る。ステップＳ５０４では、Stringオブジェクトを再編成する。
【００６８】
なお、ステップＳ５０３で第２の文字列を含むchar配列オブジェクトの削除を行わず、Ｓ５０４でのStringオブジェクトの再編成だけを行ってもよい。これにより第２の文字列を含むchar配列オブジェクトを参照するオブジェクトが無くなるので、このオブジェクトは従来のＧＣによっても回収可能となる。
【００６９】
以上に説明したように、本実施形態に係る情報処理装置１Ｂは、削除部４２Ｂを備えているので、記憶部３０に記憶しているchar配列オブジェクトの中から、第１の文字列と、第１の文字列の一部と同一である第２の文字列と、を検出して、第２の文字列を含むchar配列オブジェクトを削除できる。このため、重複する文字列を減少させて、記憶部３０の記憶容量を縮小することが可能である。
【００７０】
＜４．第４実施形態＞
図１４は、本発明の第４実施形態に係る情報処理装置１Ｃの機能ブロック図である。情報処理装置１Ｃは、制御部の構成が図６の情報処理装置１Ａと異なる。この情報処理装置１Ｃは、記憶部３０に記憶しているchar配列オブジェクト群の中から、Stringオブジェクトの文字列を参照するとともに、第１の文字列と、第１の文字列の最後のcharデータを含む後部文字列を、最初のcharデータを含む前部文字列とする第２の文字列と、を検出し、後部文字列および前部文字列を１つにまとめて、第１の文字列および第２の文字列を連結する。
【００７１】
情報処理装置１Ｃの有する制御部４０Ｃは、参照部４１および削除部４２Ｃを備えている。削除部４２Ｃは、文字列検出部４２６Ｂと、文字列連結部４２８と、文字列再編成部４２４Ａと、を備えている。
【００７２】
図１５は、削除部４２Ｃで文字列操作を行う前のStringオブジェクトst_I、st_Jの文字列と、char配列オブジェクトch_D[]、ch_E[]と、の関係を示す模式図である。図１６は、削除部４２Ｃで文字列操作を行った後のStringオブジェクトst_I、st_Jの文字列と、char配列オブジェクトch_F[]と、の関係を示す模式図である。
【００７３】
図１４に戻って、文字列検出部４２６Ｂは、char配列オブジェクトの中から、第１の文字列と、第１の文字列の最後の文字データを含む後部文字列を、最初の文字データを含む前部文字列とする第２の文字列と、を検出する。例えば、文字列“import”の後部文字列“port”は、文字列“portal”の前部文字列“port”と同一である。このため、図１５では、char配列オブジェクト群CHARSの中から、第１の文字列としてのchar配列オブジェクトch_D[]の文字列“import”と、第２の文字列としてのchar配列オブジェクトch_E[]の文字列“portal”と、を検出する。
【００７４】
文字列連結部４２８は、上述の前部文字列および後部文字列を１つにまとめて、第１の文字列および第２の文字列を連結する。例えば、図１５では、char配列オブジェクトch_D[]の文字列“import”の後部文字列“port”と、char配列オブジェクトch_E[]の文字列“portal”の前部文字列“port”と、を１つにまとめて、図１６のように、char配列オブジェクトch_D[]の文字列“import”と、char配列オブジェクトch_E[]の文字列“portal”と、を連結して、char配列オブジェクトch_F[]の文字列“importal”とする。
【００７５】
文字列再編成部４２４Ａは、文字列連結部４２８で文字列を連結したことに基づいて、char配列オブジェクトを再編成する。例えば、図１５では、Stringオブジェクトst_I、st_Jのデータ部dataを、図１６のように、char配列オブジェクトch_F[]を参照するように修正し、開始部startを、図１６のように、それぞれ、char配列オブジェクトch_F[]のcharデータch_F[4]、ch_F[6]を表すように“４”と“６”に変更する。
【００７６】
以上の情報処理装置１Ｃの動作について、図１７に基づいて説明する。ステップＳ６０１では、char配列ごとに、Stringオブジェクトから使用されている文字列と、そのchar配列を参照しているStringオブジェクト群を示した一覧表を作り、ステップＳ６０２に移る。ステップＳ６０２では、一覧表のchar配列オブジェクト群の中から、第１の文字列と、第１の文字列の最後のcharデータを含む後部文字列を、最初のcharデータを含む前部文字列とする第２の文字列と、を検出し、ステップＳ６０３に移る。
【００７７】
ステップＳ６０３では、上述の前部文字列および後部文字列を１つにまとめて、第１の文字列および第２の文字列を連結し、ステップＳ６０４に移る。ステップＳ６０４では、Stringオブジェクトを再編成する。
【００７８】
以上に説明したように、本実施形態に係る情報処理装置１Ｃは、削除部４２Ｃを備えているので、記憶部３０に記憶しているchar配列オブジェクト群の中から、第１の文字列と、第１の文字列の後部文字列を前部文字列とする第２の文字列と、を検出して、前部文字列および後部文字列を１つにまとめて、第１の文字列および第２の文字列を連結できる。このため、重複する文字列を減少させて、記憶部３０の記憶容量を縮小することが可能である。
【００７９】
以上、本発明の好適な実施例を用いて説明したが、本発明の技術的範囲は、上記実施形態に記載の範囲には限定されない。上記実施形態に、多様な変更または改良を加えることができる。そのような変更または改良を加えた形態も、本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。例えば、本発明は、上述の実施形態の特徴部分を組み合わせたものであってもよい。
【００８０】
図１８は、各実施形態を組み合わせて適用した場合の例で、(a)が適用前の記憶部３０の状態、(b)が適用後の状態を表している。
【００８１】
また、本発明は、情報処理装置１、１Ａ、１Ｂ、１Ｃ上のプログラムによって、実現可能である。上述のプログラムを格納する記憶媒体は、電子的、磁気的、光学的、電磁的、赤外線または半導体システム（または、装置または機器）あるいは伝搬媒体であることができる。コンピュータ可読の媒体の例には、半導体またはソリッド・ステート記憶装置、磁気テープ、取り外し可能なコンピュータ・ディスケット、ランダム・アクセス・メモリ（ＲＡＭ）、リードオンリー・メモリ（ＲＯＭ）、リジッド磁気ディスクおよび光ディスクが含まれる。現時点における光ディスクの例には、コンパクト・ディスク−リードオンリー・メモリ（ＣＤ−ＲＯＭ）、コンパクト・ディスク−リード／ライト（ＣＤ−Ｒ／Ｗ）およびＤＶＤが含まれる。
【図面の簡単な説明】
【００８２】
【図１】本発明の第１実施形態に係る情報処理装置の機能ブロック図である。
【図２】前記情報処理装置の記憶媒体に記憶する文字列群の模式図である。
【図３】前記情報処理装置の削除部で文字列操作を行う前の特定文字列および文字列群の関係を示す模式図である。
【図４】前記情報処理装置の削除部で文字列操作を行った後の特定文字列および文字列群の関係を示す模式図である。
【図５】前記情報処理装置の動作を示すフローチャート図である。
【図６】本発明の第２実施形態に係る情報処理装置の機能ブロック図である。
【図７】前記情報処理装置の削除部で文字列操作を行う前の特定文字列および文字列群の関係を示す模式図である。
【図８】前記情報処理装置の削除部で文字列操作を行った後の特定文字列および文字列群の関係を示す模式図である。
【図９】前記情報処理装置の動作を示すフローチャート図である。
【図１０】本発明の第３実施形態に係る情報処理装置の機能ブロック図である。
【図１１】前記情報処理装置の削除部で文字列操作を行う前の特定文字列および文字列群の関係を示す模式図である。
【図１２】前記情報処理装置の削除部で文字列操作を行った後の特定文字列および文字列群の関係を示す模式図である。
【図１３】前記情報処理装置の動作を示すフローチャート図である。
【図１４】本発明の第４実施形態に係る情報処理装置の機能ブロック図である。
【図１５】前記情報処理装置の削除部で文字列操作を行う前の特定文字列および文字列群の関係を示す模式図である。
【図１６】前記情報処理装置の削除部で文字列操作を行った後の特定文字列および文字列群の関係を示す模式図である。
【図１７】前記情報処理装置の動作を示すフローチャート図である。
【図１８】本発明の実施形態を組み合わせて適用した模式図である。
【符号の説明】
【００８３】
１、１Ａ〜１Ｃ    情報処理装置
１０    入力部
２０    出力部
３０    記憶部
４０、４０Ａ〜４０Ｃ    制御部
４１    参照部
４２、４２Ａ〜４２Ｃ    削除部
４２１    リスト作成部
４２２、４２２Ａ    文字データ検出部
４２３    文字データ削除部
４２４、４２４Ａ    文字列再編成部
４２５    文字列整列部
４２６、４２６Ａ〜４２６Ｂ    文字列検出部
４２７    文字列削除部
４２８    文字列連結部
【図１】
2007183905.tif 000003
【図２】
2007183905.tif 000004
【図３】
2007183905.tif 000005
【図４】
2007183905.tif 000006
【図５】
2007183905.tif 000007
【図６】
2007183905.tif 000008
【図７】
2007183905.tif 000009
【図８】
2007183905.tif 000010
【図９】
2007183905.tif 000011
【図１０】
2007183905.tif 000012
【図１１】
2007183905.tif 000013
【図１２】
2007183905.tif 000014
【図１３】
2007183905.tif 000015
【図１４】
2007183905.tif 000016
【図１５】
2007183905.tif 000017
【図１６】
2007183905.tif 000018
【図１７】
2007183905.tif 000019
【図１８】
2007183905.tif 000020