嗨我想从长字符串中删除某些单词,问题是某些单词以“s”结尾,有些单词以大写字母开头,基本上我想转:
"Hello cat Cats cats Dog dogs dog fox foxs Foxs"
成:
"Hello"
目前我有这个代码,但我想提高它,提前谢谢:
.replace("foxs", "")
.replace("Fox", "")
.replace("Dogs", "")
.replace("Cats", "")
.replace("dog", "")
.replace("cat", "")
答案 0 :(得分:3)
试试这个:
String input = "Hello cat Cats cats Dog dogs dog fox foxs Foxs";
input = input.replaceAll("(?i)\\s*(?:fox|dog|cat)s?", "");
答案 1 :(得分:2)
也许您可以尝试匹配除Hello
之外的所有内容。
类似的东西:
string.replaceAll("(?!Hello)\\b\\S+", "");
您可以在this link中进行测试。
这个想法是对Hello
单词执行否定预测,并获得任何其他单词。
答案 2 :(得分:0)
您可以生成与单词的所有组合匹配的模式。即对于dog
,您需要模式[Dd]ogs?
:
[Dd]
是一个匹配两种情况的字符类s?
匹配零个或一个s
dOGS
不会匹配。这就是你可以把它放在一起的方式:
public static void main(String[] args) {
// it's easy to add any other word
String original = "Hello cat Cats cats Dog dogs dog fox foxs Foxs";
String[] words = {"fox", "dog", "cat"};
String tmp = original;
for (String word : words) {
String firstChar = word.substring(0, 1);
String firstCharClass = "[" + firstChar.toUpperCase() + firstChar.toLowerCase() + "]";
String patternSrc = firstCharClass + word.substring(1) + "s?"; // [Ww]ords?
tmp = tmp.replaceAll(patternSrc, "");
}
tmp = tmp.trim(); // to remove unnecessary spaces
System.out.println(tmp);
}
答案 3 :(得分:0)
因此,您可以预编译所需单词的列表,并使其不区分大小写:
String str = "Hello cat Cats cats Dog dogs dog fox foxs Foxs";
Pattern p = Pattern.compile("fox[s]?|dog[s]?|cat[s]?", Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(str);
String result = m.replaceAll("");
System.out.println(result);
[S]?处理如果有复数形式,在哪里?字符将匹配0或1