替换不在String中的所有内容

时间:2017-11-14 11:35:45

标签: java

我知道当我使用.replace时,我可以用另一个字符串替换指定的String。例如:

String string = “hi fjrkfinnek”;

string.replace(“fjrkfinnek”, “”);

我知道使用它会在此示例中用空格替换字符串的指定部分。但是,是否可以删除“hi”的所有内容,而不是引用我想要替换的内容?

我想要的输出是删除除Hi之外的所有内容,如果可以的话,删除所有不是Hi的内容!

5 个答案:

答案 0 :(得分:0)

现在你问:如何删除所有的"而不是X"从

Xxyz

简单的答案是:当你已经知道X应该是剩下的时候,那么" X"应该这样做。

更严肃一点:人们可以考虑在这里使用正则表达式 - 但它们只允许你匹配。不匹配"不是"。

你可以从[^hi]开始 - 但这并不是你所希望的:它只是说:任何不包含h / i的东西都会匹配。

答案 1 :(得分:0)

当然有一些方法可以使这个工作。例如replace通过否定前瞻How to negate specific word in regex?)接受能够否定正则表达式。或者您可以手动遍历输入等。

解决方案

然而,有一个更简单的解决方案。如果您要删除输入中不是foo的所有内容

test foo bar 123 test

然后结果可以完全为空(如果未包含foo)或仅foo(如果已包含)。因此,只需检查您的是否存在:

public String deleteAllExceptFirst(String input, String needle) {
    if (input.contains(needle)) {
        return needle;
    } else {
        return "";
    }
}

多个实例

请注意,如果您想保留多个foo次出现,则需要额外的工作。只计算foo被包含的次数,然后将其打印出来连接:

public String deleteAllExcept(String input, String needle) {
    StringBuilder sb = new StringBuilder();

    // Find all occurrences
    Pattern needlePatt = Pattern.compile(needle);
    Matcher matcher = needlePatt.matcher(input);
    while (m.find()) {
        // Build the result
        sb.append(needle);
    }

    return sb.toString();
}

对于测试输入

test foo bar 123 test foo foo bar foo

这会产生

foofoofoofoo

答案 2 :(得分:0)

给定您提供的字符串,您可以使用split()函数将其拆分为单词,然后仅附加那些不包含“hi”的部分。

如果您使用java 8,则可以使用过滤器执行此操作:

String string = “hi fjrkfinnek”;
    Arrays.asList(string.split(" ")).stream()
                     .filter(s -> !s.equals("hi")).collect(Collectors.joining());

在上面的代码中,我将每个单词作为字符串,然后我将其流式传输并应用过滤器,以便只允许那些不同于“hi”的过滤器。最后我加入一个String。

答案 3 :(得分:0)

没有这样的图书馆。你可以这样做:

 String replaceOthers(String required, String fullString) {
    String result = fullString;
    try (Scanner scanner = new Scanner(fullString)) {
        while (scanner.hasNext()) {
            String current = scanner.next();
            if (!current.equals(required)) {
                result = result.replace(current, "");
            }
        }
        return result;
    }
}

答案 4 :(得分:0)

我认为使用正则表达式我们可以做到这一点..

string.replaceAll("[^hi]", "?")