web-dev-qa-db-ja.com

変数をアルファベットの次または前の文字にインクリメントするにはどうすればよいですか?

可変文字列で大文字が定義されていて、アルファベットの前後の文字を出力したい。たとえば、変数が'C'と等しい場合、'B'および'D'を出力します。

18
raleighJ

一方通行:

String value = "C";
int charValue = value.charAt(0);
String next = String.valueOf( (char) (charValue + 1));
System.out.println(next);
29
Kevin

まあ、「ABC」を意味する場合、それらは2つのシーケンスa-zとA-Zに分割されます。char変数を使用し、インデックスを1つインクリメントするのが最も簡単な方法だと思います。

char letter='c';
letter++;  // (letter=='d')

デクリメントについても同様です。

char letter='c';
letter--; // (letter=='b')

文字の表現はa-zが97-122でA-Zが65-90であるため、文字の大文字と小文字が重要な場合は注意する必要があります。

12
TacB0sS

ラテンアルファベットに限定されている場合は、ASCIIテーブルの文字がアルファベット順に並べられているため、次のようになります。

System.out.println((char) ('C' + 1));
System.out.println((char) ('C' - 1));

DおよびBを出力します。

あなたがすることは、charintを追加することです。したがって、intcharのASCIIコードに効果的に追加します。 charにキャストバックすると、ASCIIコードが文字に変換されます。

6
Bozho

ちょうどこのような :

System.out.printf("%c\n",letter);
letter++;
0
Daniel

答えはすべて正解ですが、詳しい説明はないようですので、試してみます。他のタイプと同様に、charは数値として格納されます( Javaでは16ビット )。他の非数値型とは異なり、格納された数値の値とそれらが表すcharsの値のマッピングはよく知られています。このマッピングは ASCIIテーブル と呼ばれます。 Javaコンパイラはcharsを16ビットの数値として扱うため、次のことが可能です。

System.out.print((int)'A'); // prints 65
System.out.print((char)65); // prints A

このため、++--およびその他の数学演算はcharsに適用され、それらの値をインクリメント/デクリメントする方法を提供します。

16ビットを超えると、キャストが循環することに注意してください。

System.out.print((char)65601); // also prints A
System.out.print((char)-65471); // also prints A

P.S。これはKotlinにも適用されます。

println('A'.toInt()) // prints 65
println(65.toChar()) // prints A
println(65601.toChar()) // prints A
println((-65471).toChar()) // prints A
0
Sir Codesalot