正規表現を使用して、数値文字列のすべての文字を ASCII 番号に置き換える方法はありますか?
例えば
"12a345b6"
なる必要があります:
1297345986
編集:皮肉なことに、友好的で役立つ反応をありがとう。単純な「いいえ、あなたが望む方法では不可能です」で十分でした。これの代わりに、この質問を投稿したことを後悔する教化を受けます。知識を拡張する代わりに、私は混乱してイライラしてしまいます。再度、感謝します!
ここでは、問題のどの部分でも正規表現を使用する必要はありません。各文字をフェッチし、それを ASCII コードに変換するだけです。それがアルファベットの場合は、そうでない場合はそのままにしておきます。
StringBuilder
ここで役に立ちます。
必要な作業は次のとおりです。
String str = "12a345b6";
StringBuilder builder = new StringBuilder();
for (char ch: str.toCharArray()) {
builder.append(Character.isDigit(ch) ? ch : String.valueOf((int)ch));
}
System.out.println(builder.toString());
キャラクターが に昇格するのを避けるために、タイプキャストString.valueOf
の周りで使用する必要があることに注意してください。これは、JLS - セクション #15.25で指定されているとおりです。int
ch
int
それ以外の場合、2 番目と 3 番目のオペランドが数値型に変換可能な型 (§5.1.8) を持っている場合、いくつかのケースがあります。
- それ以外の場合、2 進数値昇格 (§5.6.2) がオペランドの型に適用され、条件式の型は 2 番目と 3 番目のオペランドの昇格された型になります。
int
したがって、 を に変換しない場合、String
上記のステートメントに従って、2 番目の引数 -ch
が に昇格され、文字自体の代わりにのASCII コードint
が追加されます。1
'1'
本当に正規表現ベースのソリューションを探しているなら、このコードはあなたのために働くはずです:
String str = "12a345b6";
Pattern p = Pattern.compile("(?i)([a-z])");
Matcher m = p.matcher(str);
StringBuffer buf = new StringBuffer();
while (m.find()) {
m.appendReplacement(buf, "" + (int) m.group(1).charAt(0));
}
m.appendTail(buf);
System.out.printf("After: %s%n", buf);
After: 1297345986