我想在字符串中只允许少数子串(允许的单词)。我想删除其他子串。
所以我想替换除“abc”,“def”和“ghi”等少数词之外的所有单词。
我想要这样的东西。 str.replaceAll(“^ [abc],”“)。replaceAll(”^ [def],“”)..........(语法不正确)
输入:字符串:“ abcxyzorkdefa ”允许使用的字词:{“ abc ”,“ def ”}
输出:“ abcdef ”;
如何实现这一目标? 在此先感谢。
答案 0 :(得分:1)
这是一种更像C的方法,但使用Java的String.startsWith
来匹配模式。该方法沿着提供的字符串行走,将匹配的模式保存到找到它们的结果中的结果字符串。
您只需要确保包含较小图案的任何较长图案都位于图案阵列的前面(因此"abcd"
位于"abc"
之前)。
class RemoveNegated {
public static String removeAllNegated(String s, List<String> list) {
StringBuilder result = new StringBuilder();
// Move along the string from the front
while (s.length() > 0) {
boolean match = false;
// Try matching a pattern
for (String p : list) {
// If the pattern is matched
if (s.toLowerCase().startsWith(p.toLowerCase())) {
// Save it
result.append(p);
// Move along the string
s = s.substring(p.length());
// Signal a match
match = true;
break;
}
}
// If there was no match, move along the string
if (!match) {
s = s.substring(1);
}
}
return result.toString();
}
public static void main(String[] args) {
String s = "abcxyzorkdefaef";
s = removeAllNegated(s, Arrays.asList("abc", "def", "ghi"));
System.out.println(s);
}
}
打印:abcdef