特定の文字を削除するには正規表現が必要ですが、削除された文字は新しい文字列に保持されます。私は2つの別々の表現を使わないことを望んでいる。正規表現を使用しますが、置き換えられたものは保持しますか?
例: 文字列からすべての数値を削除しますが、それらを保存して別の文字列に配置したいとします。 「a1b23c」は「abc」になり、新しい文字列「123」
ありがとうございました!
特定の文字を削除するには正規表現が必要ですが、削除された文字は新しい文字列に保持されます。私は2つの別々の表現を使わないことを望んでいる。正規表現を使用しますが、置き換えられたものは保持しますか?
例: 文字列からすべての数値を削除しますが、それらを保存して別の文字列に配置したいとします。 「a1b23c」は「abc」になり、新しい文字列「123」
ありがとうございました!
あなたは数字を削除するような単純なことをやっている場合、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);
あなたは正しいと思います。たぶん私はその問題を考えていたかもしれない。私の実際の問題は、手紙を出すことです... isLetter ..ありがとう。私はキャプチャグループが正規表現でそれを行う方法だろうと思うが、上記のコメントでlbarrosが言ったが、それは私が推測するこの場合効率的ではないだろう。 – Mart
あなたが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
を使用する必要があります。
キャプチャグループを見てください。 –
正規表現での削除ではなく、正規表現でのコピーまたはカット機能を使用すると、これを最もうまく処理できます。あなたはそれをメモリ内に保持し、それを変数に格納することができます。 – Karlomanio
を参照してください[この回答](http://codereview.stackexchange.com/a/2349/106356) –