在一个语句中从String中删除多个单词

时间:2014-01-29 23:36:17

标签: java

我希望使用一个语句清除URL字符串的http://www.部分。

我不是在使用巫术正则表达式解决方案之后,我只是想知道是否有一种方法可以在一个替换语句中替换(读取:删除)两个单词。

梦境:

String url = "http://www.superfect.com";
String[] purge = {"http://", "www."};
url = url.replace(purge, "");

然而,这不会运行。这通常是如何在Java中完成的?

6 个答案:

答案 0 :(得分:3)

在一行中,只需一次替换操作:

url = url.replaceAll("http://|www\\.", "");

答案 1 :(得分:2)

在一个简单的循环中执行此操作:

String purge[] = {"www.", "http://", "https://", "ftp://"};
String result = url;
for (int i = 0; i < purge.length; ++i)
{
    result = result.replace(purge[i], "");
}

现在,result字符串就是您想要的字符串。当 codesalsa 指出并给出了URL的上下文时,您可能希望这样做:

String purge[] = {"http://", "https://", "ftp://", "www."}; //order is important!
String result = url;
for (int i = 0; i < purge.length; ++i)
{
    if (result.startsWith(purge[i])
    {
        result = result.substring(purge[i].length);
    }
}

答案 2 :(得分:1)

Java没有提供一次替换多个文字字符序列的方法。可以使用正则表达式来匹配同一调用中的两个预期替换目标。

如果没有正则表达式,您需要为每个目标调用replace一次。

url = url.replace("http://", "").replace("www.", "");

答案 3 :(得分:1)

你可以做到

url = url.replaceAll("http://(?:www\\.)?", "");

答案 4 :(得分:1)

你已经有了很多不错的选择。在这里写的工作解决方案。但是,我有点喜欢干净,易于理解的代码。没有什么比优雅的单指令解决方案更精彩了。干得好。不客气!

public class Test {
        public static String parseDomainName(String url) {
            return (
                url.startsWith("http://www.") ? url.replaceFirst("http://www\\.", "") :
                    url.startsWith("http://") ? url.replaceFirst("http://", "") :
                        url.startsWith("www.") ? url.replaceFirst("www\\.", "") :
                            url
            );
    }

    public static void main(String[] args) {
        System.out.println(parseDomainName("http://www.google.com"));
        System.out.println(parseDomainName("http://google.com"));
        System.out.println(parseDomainName("www.google.com"));
        System.out.println(parseDomainName("google.com"));
        System.out.println(parseDomainName("http://misleading.www.com"));
    }
}

好吧,我只是在开玩笑!但它就是这里的单一解决方案,它在一个命令中工作并且不使用正则表达式(嗯,方法replaceFirst()实际上只接受正则表达式,但是即使使用不同的方法它也会使用相同的逻辑,只接受纯文本字符串)。

使用this解决方案,因为如果您真的想避免使用正则表达式,这是最好的折衷方案。我做的这个解决方案实际上只是一个笑话,看到它在某个地方使用它会很糟糕。 : - )

答案 5 :(得分:0)

这个怎么样?

url = url.replace("http://www.", "");

那不行吗?