0

会社の文字列の説明がありますが、これはさまざまなユーザーによって書かれた厄介なものです (手書き)。以下に例を示します (ドット、スペース、最初の文字などに注目してください)。

XXXX は、120 か国以上で 257,000 人の従業員を擁するグローバルな管理コンサルティング、テクノロジー サービス、およびアウトソーシング企業です。比類のない経験、すべての業界およびビジネス機能にわたる包括的な能力、世界で最も成功している企業に関する広範な調査を組み合わせて、XXXX はクライアントは、彼らが高性能の企業や政府になるのを支援する.

今私が欲しいのは、文字列を次のような少し良いバージョンにフォーマットすることです:

XXXX は、120 か国以上で 257,000 人の従業員がクライアントにサービスを提供している、グローバルな経営コンサルティング、テクノロジー サービス、およびアウトソーシング企業です。XXXX は比類のない経験、すべての業界とビジネス機能にわたる包括的な機能、および世界で最も成功している企業に関する広範な調査を組み合わせて、顧客と協力して、顧客が高性能の企業および政府になるのを支援します。同社は 2012 年 8 月 31 日に終了した会計年度に 279 億米ドルの純収益を生み出しました。

私の質問は次のとおりです。すべてのスペル修正、不要なスペースの削除などを実行できるメソッドが既に定義されているライブラリはありますか?

これまでのところ、「、」のようなものを「、」に置き換え、「///」の場合は toUpperCase() に置き換えています。前などに。

desc = desc.replace("  ", " ");
desc = desc.replace("..", ".");
desc = desc.replace(" .", ".");
desc = desc.replace(" ,", ", ");
desc = desc.replace(".,", ".");
desc = desc.replace(",.", ".");
desc = desc.replace(", .", ".");
desc = desc.replace("*", "");

これを行うには、よりクリーンで優れたバージョンがあると確信しています。おそらく正規表現を使用していますか??

任意のソリューションをいただければ幸いです。

4

1 に答える 1

0

私があなたの問題を解決しようとしているなら、おそらくchar一度に 1 つずつテキストを読み、あなたが進むにつれてそれをフォーマットします。たとえば、疑似コードでは...

while (has more chars){
    char letter = readChar();
    if (letter == ','){
        // checking for the ',.' combination
        letter = readChar(); 
        if (readChar == '.'){
            // write out a '.' only
            out.print('.');
        }
        else {
            // it wasn't the ',.' combination, so you need to output both characters, whatever they are
            out.print(',');
            out.print(letter);
        }
    }
    else if (another letter you want to filter){
        // etc.
    }
    else {
        // doesn't match any of the filters, so just output the letter
        out.print(letter);
    }
}

基本的に、テキストcharを一度に 1 つずつ読むと、選択したフォーマットの問題を見つけてすぐに修正できます。これにより、テキスト文字列を 1 回だけ (現在行っているように 8 回ではなく) 読み取るため、パフォーマンスが向上し、さまざまな/複雑な書式設定の変更を必要なだけ追加できます。ただし、欠点は、組み込み関数に依存するのではなく、ロジックを自分で作成する必要があることです。

于 2012-11-28T12:37:03.663 に答える