我希望使用一个语句清除URL字符串的http://
和www.
部分。
我不是在使用巫术正则表达式解决方案之后,我只是想知道是否有一种方法可以在一个替换语句中替换(读取:删除)两个单词。
梦境:
String url = "http://www.superfect.com";
String[] purge = {"http://", "www."};
url = url.replace(purge, "");
然而,这不会运行。这通常是如何在Java中完成的?
答案 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.", "");
那不行吗?