2016-08-24 3 views
0

私は入力にJavaの表現マッチ

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

と出力

ENGLISH URL ENGLISH @cnet

にしたいを与えている

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 URL @cnet

その後、私は修正が英語(#、%、@などのような)特殊文字以下でない文のすべての部分を変更する

ENGLISH URL @cnet 

にそれを修正したいです。

+0

は、なぜあなたは、単一のドットをキャプチャし、スラッシュとも役に立たないグループに入れていますか? –

答えて

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

これを使用すると、http://から一致し始め、スペースに遭遇するまで通常の文字、点、スラッシュに一致します。そして、それを「URL」に置き換えます。

"https?://"で開始して、httpとhttpsで始まるリンクを一致させることもできます。

+0

実際にあなたのコードは部分的には動作しています。どのように表示するのか質問を編集できますか? – thepurpleowl

+1

代わりにIsrael Untermanの提案を、はるかに簡単に使用してください! – asiew

3

何をしたいことは、ウェブアドレスを交換する場合には、正規表現は、はるかに簡単になります

http\\S+ 

そして、それがすべてです!

httpをスキャンして、それ以外のすべての空白を探します。最初のスペースで停止します。

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

あなたは、天才です。 – dorukayhan

+1

素晴らしい提案!また、httpとhttpsの両方で始まるリンクと一致するように "https?://"で開始することもできます。 – asiew

+0

"Big mo:1週間でhttp://www.google.co.in/HTpから@cnet"を "ENGLISH URL ENGLISH @cnet"に変更したい場合。 URLをURLに変更した後と同じように、特殊文字(@、&など)の後ろに続く文の他の部分をENGLISHに変更したい。どうやってするか? – thepurpleowl

0

使用している。この

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

を試してください:あなたは少し長い正規表現で安全を作ることができ、安全側にあるとhttpで始まるいくつかの単語のケースを回避するために

.*があなたのコードです。すべての文字列を次のスペースにマッチさせます。私はなぜそれが動作しているのか分からない。しかし、.*の代わりに\\wを使用すると、コードが機能します。あなたはこれを試すことが

+0

詳細を編集してください。コード専用と「試してください」の回答は、検索可能なコンテンツが含まれていないため、推奨されません。なぜ誰かが「これを試してみる」べき理由を説明しません。 – Paritosh

+1

Ok @Paritosh。私は自分のコードを編集しました。 –

0

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