1

プログラムのインデックスを作成したいのですが、最も重要なステップの 1 つはテキストを正規化することです。たとえば、"[(Mac Pro @apple)]" を "macproapple" に変換する必要があります。この場合、空白、句読点 ([()])、および特殊文字 (@) をフィルター処理します。私のコードは次のようなものです:

StringBuilder sb = new StringBuilder(text);
sb = filterPunctuations(sb);
sb = filterSpecialChars(sb);
sb = filterBlankSpace(sb);
sb = toLower(sb);

これにより多くの String オブジェクトが生成されるため、StringBuilder を使用することにしました。しかし、StringBuffer でそれを行う方法がわかりません。誰にもいくつかの提案がありますか?漢字も扱う必要があります。

4

2 に答える 2

2

replaceAll正規表現で api を使用できます

String originalText = "[(Mac Pro @apple)]";
String removedString = originalText.replaceAll("[^\\p{L}\\p{N}]", "").toLowerCase();

メソッドは内部replaceAll的に StringBuffer を使用するため、メモリ内に複数のオブジェクトが作成されても心配する必要はありません。

クラスreplaceAll内のコードは次のとおりですMatcher

 public String replaceAll(String replacement) {
        reset();
        boolean result = find();
        if (result) {
            StringBuffer sb = new StringBuffer();
            do {
                appendReplacement(sb, replacement);
                result = find();
            } while (result);
            appendTail(sb);
            return sb.toString();
        }
        return text.toString();
    }
于 2012-04-24T06:08:41.140 に答える
1

これを試して-

class Solution
{
        public static void main (String[] args)
        {
                String s = "[(Mac Pro @apple)]";
                s = s.replaceAll("[^A-Za-z]", "");
                System.out.println(s);
        }
}

これにより、次の出力が得られます

MacProapple

上記の行の簡単な説明は-

s.replaceAll("[^A-Za-z]", "")AZ および az にない (^ で示される) 文字列内のすべてを削除します。Java の正規表現については、こちらで説明しています。

最後に文字列を小文字に変換したい場合は、 を使用する必要がありますs.toLowerCase()

于 2012-04-24T05:59:46.397 に答える