2016-05-25 1 views
-1

特定の文字を削除するには正規表現が必要ですが、削除された文字は新しい文字列に保持されます。私は2つの別々の表現を使わないことを望んでいる。正規表現を使用しますが、置き換えられたものは保持しますか?

例: 文字列からすべての数値を削除しますが、それらを保存して別の文字列に配置したいとします。 「a1b23c」は「abc」になり、新しい文字列「123」

ありがとうございました!

+0

キャプチャグループを見てください。 –

+0

正規表現での削除ではなく、正規表現でのコピーまたはカット機能を使用すると、これを最もうまく処理できます。あなたはそれをメモリ内に保持し、それを変数に格納することができます。 – Karlomanio

+0

を参照してください[この回答](http://codereview.stackexchange.com/a/2349/106356) –

答えて

0

あなたは数字を削除するような単純なことをやっている場合、StringBuilder秒のペアを使用して容易になるだろう:

StringBuilder digits = new StringBuilder(); 
StringBuilder nonDigits = new StringBuilder(); 
for (int i = 0; i < str.length(); ++i) { 
    char ch = str.charAt(i); 
    if (Character.isDigit(ch) { 
    digits.append(ch); 
    } else { 
    nonDigits.append(ch); 
    } 
} 
System.out.println(nonDigits); 
System.out.println(digits); 
+0

あなたは正しいと思います。たぶん私はその問題を考えていたかもしれない。私の実際の問題は、手紙を出すことです... isLetter ..ありがとう。私はキャプチャグループが正規表現でそれを行う方法だろうと思うが、上記のコメントでlbarrosが言ったが、それは私が推測するこの場合効率的ではないだろう。 – Mart

1

あなたがMatcher.appendReplacement()Matcher.appendTail()を使用して検索/置換ループで記述するものを行うことができます。

Matcher matcher = Pattern.compile("\\d+").matcher("a1b23c"); 
StringBuffer nonDigits = new StringBuffer(); 
StringBuffer digits = new StringBuffer(); 

while (matcher.find()) { 
    digits.append(matcher.group()); 
    matcher.appendReplacement(nonDigits, ""); 
} 
matcher.appendTail(nonDigits); 

System.out.println(nonDigits); 
System.out.println(digits); 

出力:あなたたとえば

abc 
123 

あなたはそれがMatcherがサポートしているものだから、このアプローチのためにStringBufferの代わりStringBuilderを使用する必要があります。

関連する問題