2

私がやりたいのは、特定の文字列から部分文字列を抽出することです。

例えば

String str = "Eminem - Not Afraid with lyrics 2010";
String str2 = "Eminem - Not Afraid (HQ)";
String str3 = " Eminem Not afraid (Lyrics)";

のような余分な単語を削除したい

lyrics
2010
HQ
()
with

すべての「余分な文字列」を含むハッシュテーブルがある場合

特定の文字列から余分な文字列を削除する最良の方法は何ですか?

最初は正規表現を使用しましたが、役に立ちませんでした。また、アーティスト名(ehonest)にいくつかのエンティティ抽出を使用しましたが、アーティスト専用です

問題は、曲に余分な文字列が含まれている場合、含まれている余分な文字列も削除されることです。

みんなお願いします、何か助けや提案はありますか?

ありがとう

4

2 に答える 2

2

ApacheのStringUtilsはここであなたの友達かもしれません:

http://commons.apache.org/lang/api-2.5/org/apache/commons/lang/StringUtils.html

これは、JDKに付属しているString /Stringutilsよりもはるかに用途が広いです。(たとえば、複数の「with」を持つ文字列の最後の「with」を取得するのに役立つ「LastIndexOf」メソッドがあります)。

于 2011-10-08T07:26:05.893 に答える
1

パフォーマンスを向上させることができますが、開始するための解決策を次に示します。

public static void main(String[] args) throws Exception {
    String str = "Eminem - Not Afraid with lyrics 2010";
    String str2 = "Eminem - Not Afraid (HQ)";
    String str3 = " Eminem Not afraid (Lyrics)";

    System.out.println(replace(str));
    System.out.println(replace(str2));
    System.out.println(replace(str3));
}



private static String replace(String string) {
    List<String> extraList = Arrays.asList(new String[] { "lyrics", "2010", "HQ", "(", ")", "with" });
    for (String extra : extraList) {
        int index = string.indexOf(extra);
        while (index >= 0) {
            string = string.substring(0, index) + string.substring(index + extra.length(), string.length());
            index = string.indexOf(extra);
        }
    }

    return string;
}

「indexOf」は大文字と小文字を区別することに注意してください。大文字と小文字を区別しない場合は、独自の別の String ユーティリティ ライブラリを作成する必要があります。"toUpperCase" および "toLowerCase" 文字列メソッドが役立つことに注意してください。幸運を。

于 2011-10-08T07:39:52.673 に答える