hey zusammen,
ich hab folgendes Problem:
Aus einem Satz sollen einige Wörter einer Liste entfernt werden. Die Wörter können überall im Satz stehen. Wenn diese zu entfernenden Wörter teil eines Wortes sind sollen diese nicht entfernt werden. Wo ein Wort anfängt oder aufhört ist durch eine Anzahl von Zeichen bestimmt.
Ich habe eigentlich schon einen Ansatz, nur kommt mir dieser zu kompliziert vor.. aber ich habe keine idee wie ich das vom Prinzip her einfacher gestalten könnte. Habt ihr vieleicht eine Idee?
Hier der code, hoffe soweit ohne großartig kommentare verständlich.
ich hab folgendes Problem:
Aus einem Satz sollen einige Wörter einer Liste entfernt werden. Die Wörter können überall im Satz stehen. Wenn diese zu entfernenden Wörter teil eines Wortes sind sollen diese nicht entfernt werden. Wo ein Wort anfängt oder aufhört ist durch eine Anzahl von Zeichen bestimmt.
Ich habe eigentlich schon einen Ansatz, nur kommt mir dieser zu kompliziert vor.. aber ich habe keine idee wie ich das vom Prinzip her einfacher gestalten könnte. Habt ihr vieleicht eine Idee?
Hier der code, hoffe soweit ohne großartig kommentare verständlich.
Java:
Matcher titleMatcher;
Pattern wordPattern;
// title only one word, the stopword
if(title.toLowerCase().equals(word.toLowerCase())) {
title = "";
return;
}
// filter stopword as first word in title
StringBuffer buffer = new StringBuffer();
String patternFirstWord = word.toLowerCase() + wordSeparatorPattern;
wordPattern = Pattern.compile(patternFirstWord);
titleMatcher = wordPattern.matcher(title.toLowerCase());
if(titleMatcher.find() && titleMatcher.start()==0)
titleMatcher.appendReplacement(buffer, "");
titleMatcher.appendTail(buffer);
// filter stopword as last word in title
String patternLastWord = wordSeparatorPattern + word.toLowerCase();
wordPattern = Pattern.compile(patternLastWord);
titleMatcher = wordPattern.matcher(buffer.toString().toLowerCase());
while(titleMatcher.find()) {
if(titleMatcher.end()==buffer.length()) {
buffer = new StringBuffer();
titleMatcher.appendReplacement(buffer, "");
}
}
// filter stopwords somewhere within the title
String patternWithinTitle = "(" + wordSeparatorPattern + word.toLowerCase() + ")+" + wordSeparatorPattern;
wordPattern = Pattern.compile(patternWithinTitle);
titleMatcher = wordPattern.matcher(buffer.toString().toLowerCase());
title = titleMatcher.replaceAll(" ");
Zuletzt bearbeitet: