2016-12-20 1 views
0

は非常に簡単です:regexを使って文字列を置き換える方法は?私は、Javaと私がやりたいことを使用してい

  • 私は特定の単語の2番目の文字を取得したい、

  • テストこの文字は、それが等しい場合「」式(正規表現を使用して)一列にあるべきである「1」

  • に置き換え「B」に等しい場合、0に置き換え

何かのように:

input = input.match(/^.(.)/) == "a" 
? input.replace(/^.(.)/, "0") : input.match(/^.(.{1})/) == "b" 
? input.replace(/^.(.)/, "1") : input 

私はそれを行うために最適化されたクリーンな方法があるかどうか知りたい。前もって感謝します。

+0

あなたは2つの異なる置換文字列でパターンを交換する必要があると、このテキストから欠落しているため、Javaの正規表現と1行でそれをする方法はありません試合。 –

+3

なぜ多くの人が '。{1}'をしますか? 'との違いは何だと思いますか? – Fallenhero

+0

なぜ正規表現を使うのが奇妙なのですか?文字列の2番目の文字を取得する方法はずっと簡単です... –

答えて

0

私はあなたを正しく理解していれば、これを試すことができます。

input.replaceFirst(/^(.)a/, '$10').replaceFirst(/^(.)b/,'$11') 

意味: 文字列 (.)マッチ1文字の^開始し、このコードで

+0

実際、Javaでは 'replaceFirst(" ^(。)a "、" $ 10 ")を使用するべきです。replaceFirst(" ^(。)b "、" $ 11 ")' –

+0

これはJSではありませんでした。 「置き換える」との違いは何ですか? – Fallenhero

+0

'replaceFirst'は最初のオカレンスだけを置き換えます。ちょうどパターンと一致するように。さもなければ、あなたは '.replaceAll'を使うこともできます(これは' s.replace(/(.)./g、$ 10 ")'のように '/ g'に基づくJSパターンと同じです)。 –

0

チェックはあなたを助けるかもしれ交換でそのキャプチャを使用し

をキャプチャします。

StringBuilder str = new StringBuilder("aqbcdefag"); 
    Pattern pat = Pattern.compile("^(.)(a|b){1}.*"); 
    Matcher m = pat.matcher(str); 
    while(m.find()){ 
     System.out.println(m.start()+" : "+m.group(2)); 
     if(m.group(2).toString().equals("a")){ 
      str.replace(1, 1, "0"); 
     }else if(m.group(2).toString().equals("b")){ 
      str.replace(1, 1, "1"); 
     } 
    } 
    System.out.println(str); 
+0

お返事ありがとうございます@Vinodしかし、私が望むのは正規表現またはXMLコードに入れるオンラインコードです。 –

0

これは動作するようです:

str.replace(/^a/, "0").replace(/^b/, "1"); 
関連する問題