2016-08-24 55 views
0

我写一个代码来替换一些表达式如下Java表达式匹配

Scanner sc = new Scanner(System.in); 
    String str = sc.nextLine(); 

    str=str.replaceAll("http\\S+", "URL "); //used answer given 
    System.out.println(str); 

我给输入

iCloud hits 20M users http://www.google.com/HTpUTBFK via @cnet

,并希望输出

ENGLISH URL ENGLISH @cnet

但我得到

iCloud hits 20M users URL @cnet

后,我想将它修改为

ENGLISH URL @cnet 

的修改变化不遵循一个特殊字符(如#,%,@等),英语句子的所有部分。

+0

为什么你捕捉到一个单点和斜线,并把它放在一个无用的群体? –

回答

0
str=str.replaceAll("http://"+"[\\w|\\.|/]*"+"\\s", "URL "); 

使用此应该适合您,它会从http://开始匹配,并匹配任何常规字符,圆点和斜线,直到遇到空格。然后用“URL”替换它。

您也可以从"https?://"开始,以匹配以http和https开头的链接。

+0

实际上你的代码正在工作,但部分。我可以编辑问题以显示如何? – thepurpleowl

+1

改为使用以色列Unterman建议,简单得多! – asiew

3

如果你想要的是更换网址,正则表达式可以更简单:

http\\S+ 

而这一切!

它扫描http,然后查找所有非空格。它停在第一个空间。

为了安全起见,避免以http一些字的情况下,你可以使正则表达式的时间长一点,更安全:

'http://\\S+' 
+1

你是先生,是天才。 – dorukayhan

+1

伟大的建议!您也可以使用“https?://”来启动它以匹配以http和https开头的链接。 – asiew

+0

如果我想将“Big mo:在一周内通过@cnet将http://www.google.co.in/HTp”更改为“ENGLISH URL ENGLISH @cnet”。就像在将URL更改为URL之后一样,我想将其后没有跟着特殊字符(@,&等)的其他部分更改为英文。怎么做? – thepurpleowl

0

试试这个

str=str.replaceAll("http://" + ".*([.]).*([/])\\w*" + "\\s", "URL "); 
您使用

.*是你的代码。它匹配所有字符串与下一个空间。我不知道为什么它不起作用。但是,如果您使用\\w代替.*,那么您的代码将起作用。

+0

请编辑更多信息。仅限代码和“尝试这个”的答案是不鼓励的,因为它们不包含可搜索的内容,也不解释为什么有人应该“尝试这个”。 – Paritosh

+1

好@Paritosh。我没有编辑我的代码。 –

0

,你可以尝试这个,

str=str.replaceAll("((www\\.[^\\s]+)|(https?://[^\\s]+))", "URL");