2016-06-12 15 views
-1

fよりも大きいすべての文字を置き換え文字a。 このコマンドを変更することはできますか?は、私は1つの文字列に</p> <pre><code>myString.replace("f", "a").trim() </code></pre> <p>を文字に置き換えるために、通常は、このコマンドを使用しますが、私は六角文字列を作成したいこの時間は、私はと<code>f</code>より大きくしているすべての文字を置き換えたい

+2

*」...私がしたいの16進文字列を作成して、 'f'より大きいすべての文字を' a'という文字に置き換えたいと思っています* Um ...なぜあなたはそれをしますか? –

+1

正規表現と['replaceAll'](http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#replaceAll(java.lang.String、%20java)を使用できます。 lang.String)) – Arc676

答えて

1

あなたは上部の境界文字を(私は例としてzを使用します)がある場合、あなたはreplaceAllで正規表現を使用することができます。

myString = myString.trim().replaceAll("[g-z]", "a"); 

正規表現[g-z]は「任意の文字を意味gzを含む」、詳細はPatternを参照してください。

あなたがインスタンスの場合、鈍感たい場合は、replaceAllのデフォルトのバージョンに依存するよりも、明示的ではなく、正規表現を作成することもできます。

myString = Pattern.compile("[g-z]", Pattern.CASE_INSENSITIVE) 
        .matcher(myString.trim()) 
        .replaceAll("a"); 

+0

... [Nikolas Charalambidis](http://stackoverflow.com/users/3764965/nikolas-charalambidis)に感謝して、オリジナルの間違った答えを質問し、ドキュメントをチェックし、サポートを見つけられなかったそれ; 'g'ではなく' f'で始まったという前の答えの* other *エラーを指摘するために[Andreas](http://stackoverflow.com/users/5221149/andreas)に!また、[Tom](http://stackoverflow.com/users/3824919/tom)は、独立してドキュメントをチェックして、同時にそれを試しました。 –

+0

'CASE_INSENSITIVE'を追加する簡単な方法は:replaceAll("(?i)[g-z] "、" a ")'です。 ---あなたの古い答えに対するコメントで言及したように、replaceAll( "[^ 0-9A-Fa-f]"、 "a") 'の方が良い選択肢かもしれないので、全ての無効な*文字* 、小文字のgz *文字だけではありません。 – Andreas

+1

@アンドレアス:私は質問された質問に答えていました(* "fより大きいすべての文字...")。それは奇妙な要求(私は質問のコメントでそれを示した)が、すべての無効な文字を 'a'で置き換えるのと同じように奇妙に思えます。 :-) 'Pattern'の例は、大文字と小文字の区別がないだけでなく、正規表現*をもっとよく制御する方法を指摘するためのものです。 –

0

正規表現を使用すると、[^a-f0-9]は、16進数を表す文字列に許可されていない文字を選択します。このグループのすべての出現を希望の値に置き換える必要があります。

+2

各無効な文字を 'a'に置き換える必要がある場合、' + 'は使用できません。また、キャプチャグループは必要ありません。 – Andreas

0

文字列の文字を反復し、fより大きい文字を必要なものに置き換えることができます。

StringBuilder newString=new StringBuilder(); 
     for (int i = 0; i < myString.length(); i++) { 
      char c = myString.charAt(i); 
      if (c > 'f') { 
       newString.append('a'); 
      } else { 
       newString.append(c); 
      } 
     } 
+1

'arr = myString.toCharArray()'を呼び出すだけで、配列内の文字を修正してから 'new String(arr)'を呼び出すほうが、より速くより直接的になります。 – Andreas

関連する問題

 関連する問題