2016-04-08 10 views
0

私のアプリケーションに次のプロモーション文字列があります。文字列の2番目の出現箇所のみを置換します。

String promotion = "Watch on youtube: Mickey en de stomende drol! Watch on youtube."; 

私は、ハイパーリンクによって、第2の単語「YouTubeの」を置換したいので、私は試してみました:

promotion = promotion.replace("youtube","https://www.youtube.com/watch?v=a3leCIk2eyQ"); 
しかし、これは最初のユーチューブを置き換え、と私は二ユーチューブを交換することにしたいです。

私も試してみました:

promotion = promotion.replaceAll("youtube","https://www.youtube.com/watch?v=a3leCIk2eyQ"); 

しかし、これは、両方のyoutubesを置き換えます。

"youtube"の2番目の出現をlinKで置き換える最良の方法は何ですか?

+0

http://stackoverflow.com/questions/3976616/how-to-find-nth-occurrence-of-character-in-a-string –

+0

それはあなたが見ることができるyoutube.' 'いつもならドット。もしyou'ubeの2番目の 'youtube'なら、あなたはポジティブなルックバックを使うことができます:'(?<= youtube。{0,999})youtube'(または、ルックバックのテキストの最大長を加えたくない'(?<= youtube)(。*?)youtube'を使って、' $ 1'という逆参照を使って置き換えてください。 – Thomas

答えて

3

第2の"youtube"文字列も最後の文字列であるため、最後の文字列を探して置き換えることができます。

public static void main(String[] args) { 
     String promotion = "Watch on youtube: Mickey en de stomende drol! Watch on youtube."; 
     System.out.println(promotion.replaceAll("(.*)(\\byoutube\\b)(.*)", "$1"+ "https://www.youtube.com/watch?v=a3leCIk2eyQ" + "$3")); 
    } 

O/P:ユーチューブ上の

ウォッチ:ミッキーアン・デ・stomende drol!時計は https://www.youtube.com/watch?v=a3leCIk2eyQです。

あなたがあなたの文字列に複数のyoutube秒を持っていた場合にのみ、二youtubeを交換したい場合は、あなたが使用することができます。

public static void main(String[] args) { 
    String promotion = "Watch on youtube: Mickey en de stomende drol! Watch on youtube. asas youtube"; 
    String stringToReplace = "https://www.youtube.com/watch?v=a3leCIk2eyQ"; 
    System.out.println(promotion.replaceAll("(.*?\\byoutube\\b.*?)(\\byoutube\\b)(.*)", "$1"+ stringToReplace + "$3")); 
} 

O/P:ユーチューブ上の

ウォッチ:ミッキー・アンド・デ・ステメンデル・ドロール!時計は https://www.youtube.com/watch?v=a3leCIk2eyQです。 ASASユーチューブ

関連する問題