1. ホーム
  2. java

[解決済み] 文字列から句読点を削除する【重複

2022-01-28 02:35:48

質問

文字列があり、これらの記号を削除する必要があります。 -- + [ ] { } ( ) \ /

例えば

    String clean = "This \ is / an example. This -- is + an [(example)].";

    clean = clean.replaceAll("[/[()/]]", "");
    clean = clean.replaceAll("/-/-", "");

    clean = clean.replaceAll("\\/","");
    clean = clean.replaceAll("\\\\", " ");
    clean = clean.replaceAll("\\+", "");

    return clean.replaceAll("[ ]+", " ").trim();

私の出力はこうなるはずです。 This is an example. This is an example.

私のコードでは、必要なものがすべて削除されていません。また、これを行うより短い方法があれば知りたいです。

--

ただ、いくつかこだわりがあるので、述べておきます。 - は、2つ一緒に存在する場合のみ削除してください。 / は空白で置き換える必要があります。ここで皆さんの解決策を適応してみようと思います。ありがとうございます。

どのように解決するのですか?

String.replaceAllメソッドを呼び出して、それらの文字を空の文字列に置き換えるように指定すればよいのです。

clean = clean.replaceAll("(?:--|[\\[\\]{}()+/\\\\])", "");

しかし、これを何度も行う必要がある場合は、正規表現を繰り返しコンパイルする必要がないように、Patternオブジェクトを作成する価値があります。

private static final Pattern UNWANTED_SYMBOLS =
        Pattern.compile("(?:--|[\\[\\]{}()+/\\\\])");

これを利用してMatcherオブジェクトを作成し、それを使って置換を行うことができます。

Matcher unwantedMatcher = UNWANTED_SYMBOLS.matcher(clean);
clean = unwantedMatcher.replaceAll("");

数回以上実行されるループの中で置換を使用する必要がある場合は、この方法がより効率的です。