Извлечение сущностей и удаление из String - PullRequest
2 голосов
/ 08 октября 2011

что я хочу сделать, это извлечь подстроки из заданной строки.

Например,

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

Я хочу удалить дополнительные слова, такие как

lyrics
2010
HQ
()
with

Если у меня есть хеш-таблица, содержащая все «дополнительные строки»

Какой лучший способ удалить дополнительные строки из данной строки?

Сначала я использовал regex, но это бесполезноКроме того, я использовал некоторые извлечения entites для имени исполнителя (echonest), но только для исполнителей

проблема будет в том, что если в песне есть дополнительные строки, содержащиеся в ней дополнительные строки также будут удалены.

так, пожалуйста, ребята, любая помощь или предложение?

спасибо

Ответы [ 2 ]

2 голосов
/ 08 октября 2011

Apache StringUtils может быть вашим другом здесь:

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

Он гораздо более универсален, чем утилиты String / String, которые поставляются с JDK.(Например, у него есть метод «LastIndexOf», который поможет вам получить последнее «с» в строке, имеющей несколько «с»).

1 голос
/ 08 октября 2011

Вы можете улучшить производительность, но вот решение для начала:

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» чувствителен к регистру, если вы хотите игнорировать регистр, вам придется написать свой собственный другойСтроковая служебная библиотека.Обратите внимание на строковые методы "toUpperCase" и "toLowerCase", которые могут вам пригодиться.Удачи.

...