如何用java中的空子字符串“”(删除子字符串)替换字符串中的任何子字符串

时间:2016-08-10 10:12:04

标签: java string replace substring

我想在字符串中只允许少数子串(允许的单词)。我想删除其他子串。

所以我想替换除“abc”,“def”和“ghi”等少数词之外的所有单词。

我想要这样的东西。 str.replaceAll(“^ [abc],”“)。replaceAll(”^ [def],“”)..........(语法不正确)

输入:字符串:“ abcxyzorkdefa ”允许使用的字词:{“ abc ”,“ def ”}

输出:“ abcdef ”;

如何实现这一目标? 在此先感谢。

1 个答案:

答案 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