-1

正規表現を使用して、数値文字列のすべての文字を ASCII 番号に置き換える方法はありますか?

例えば

"12a345b6"

なる必要があります:

1297345986

編集:皮肉なことに、友好的で役立つ反応をありがとう。単純な「いいえ、あなたが望む方法では不可能です」で十分でした。これの代わりに、この質問を投稿したことを後悔する教化を受けます。知識を拡張する代わりに、私は混乱してイライラしてしまいます。再度、感謝します!

4

2 に答える 2

3

ここでは、問題のどの部分でも正規表現を使用する必要はありません。各文字をフェッチし、それを 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で指定されているとおりです。intchint

それ以外の場合、2 番目と 3 番目のオペランドが数値型に変換可能な型 (§5.1.8) を持っている場合、いくつかのケースがあります。

  • それ以外の場合、2 進数値昇格 (§5.6.2) がオペランドの型に適用され、条件式の型は 2 番目と 3 番目のオペランドの昇格された型になります。

intしたがって、 を に変換しない場合、String上記のステートメントに従って、2 番目の引数 -chが に昇格され、文字自体の代わりにのASCII コードintが追加されます。1'1'

于 2013-07-10T13:11:57.357 に答える
2

本当に正規表現ベースのソリューションを探しているなら、このコードはあなたのために働くはずです:

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
于 2013-07-10T13:03:38.153 に答える