Javaでintをcharに変換する


124

以下はコードスニペットです。

int a = 1;
char b = (char) a;
System.out.println(b);

しかし、私が得るのは空の出力です。

int a = '1';
char b = (char) a;
System.out.println(b);

出力として1を取得します。

誰かがこれを説明できますか?そして、最初のスニペットのようにintをcharに変換したい場合、どうすればよいですか?


9
文字にint型に変換?」たぶんb = (char)('0' + a)だけのために0 <= a <= 9
johnchen902 2013

6
10進値01は非印刷文字です。正常に動作しています。
前任者2016

回答:


109
int a = 1;
char b = (char) a;
System.out.println(b);

ascii値1の文字(見出しの先頭の文字。これは印刷できません)を出力します。

int a = '1';
char b = (char) a;
System.out.println(b);

ascii値49( '1'に対応する値)の文字を出力します

数字(0-9)を変換したい場合は、48を追加してキャストするか、のようにしCharacter.forDigit(a, 10);ます。

intas in ascii値を変換する場合はCharacter.toChars(48)、たとえば、を使用できます。


2
System.out.println('b'+3);b3代わり101にprintlnを使用してどのように取得できますか?代わりにprintfの他の方法?
Asif Mushtaq 2016年

2
@UnKnown次のように、charではなく文字列にする必要があります。System.out.println( "b" + 3);
Haggra

Character.toCharsASCII値ではなく、Unicodeコードポイントで動作します。intをcharにキャストしただけでも同じです(BMPの場合のみ)。
ウィークネスパース2018年

55

私の答えはjh314の答えに似ていますが、もう少し詳しく説明します。

この場合にすべきことは次のとおりです。

int a = 1;
char b = (char)(a + '0');
System.out.println(b);

文字は実際にはASCII値で表されるため、ここでは「0」を使用しました。「0」は文字であり、値48で表されます。

入力(a + '0')し、これらを合計するために、Javaは '0'を48であるASCII値に変換し、aは1であるため、合計は49になります。

(char)(49)

にキャストintしましたchar。49に相当するASCIIは「1」です。この方法で任意の数字をcharに変換でき、.toString()メソッドを使用してメソッドごとに数字を減算するよりも賢く、より良い.charAt()方法です。


42

Character.forDigitメソッドを探しているようです:

final int RADIX = 10;
int i = 4;
char ch = Character.forDigit(i, RADIX);
System.out.println(ch); // Prints '4'

charからintに変換できるメソッドもあります。

int i2 = Character.digit(ch, RADIX);
System.out.println(i2); // Prints '4'

を変更するRADIXことにより、16進数(基数16)および36までの基数(または別名)もサポートできることに注意してくださいCharacter.MAX_RADIX


@ProgrammingNub「intの値」を定義します。数字4を印刷したくないですか?または、intのASCII値を65出力して、出力しAますか?ここで私の答えは、この質問の要件に対して期待される動作を出力するためです。ideone.com/09LAFRを
Simon Forsberg

10
int a = 1;
char b = (char) a;
System.out.println(b);

ホラ、まあ私は同じ問題を経験しましたが、私がしたことは次のコードでした。

int a = 1
char b = Integer.toString(a).charAt(0);
System.out.println(b);

これにより、10進数値がchar型として取得されます。文字列への唯一の値は 'a'であり、ご存知のように、その文字列への 'a'の位置は0から始まるため、インデックス0でcharAt()を使用しました。

私の英語がうまく説明されていない場合は申し訳ありませんが、それがあなたを助けることを願っています。


3
int a = 1;
char b = (char) (a + 48);

ASCIIでは、すべての文字に独自の番号があります。そして、char '0'は10進数の48、 '1'は49などです。だから

char b = '2';
int a = b = 50;

1

ここで本当の「質問」に答えた人はいません。intをcharに正しく変換しています。ASCIIテーブルでは、01の10進値は「見出しの開始」、つまり非印刷文字です。ASCIIテーブルを検索して、33と7Eの間のint値を変換してみてください。それはあなたに見るキャラクターを与えるでしょう。


1

キャスト整数をcharに入力すると、そのintのASCII値が返されます(理解を深めるために、ASCIIテーブルを確認してください)。

    int a=68;
    char b=(char)a;

    System.out.println(b);//it will return ascii value of 68

    //output- D

2
Sort of .... charはUTF-16コード単位です。UTF-16コード単位としての68は、UnicodeコードポイントU + 0044を表すために必要な唯一のコード単位です。System.outは、テキストのエンコードをデフォルトのエンコードに変更します(おそらく、プログラムが実行されている端末/コンソールに一致します)。printlnはcharを受け取り、それをエンコードしようとします。charは完全なコードポイントであるため、試すことができます。U + 0044はほとんどすべての文字セットの文字であるため、文字化けしないターミナルへの到達に成功するはずです。ASCIIとは関係ありません。
トムブロジェット2016

0

Javaではchar intです。最初のスニペットは、デフォルトの文字エンコードスキーム(おそらくUnicode)の値1に対応する文字を出力します。Unicode文字U + 0001は非印刷文字であるため、出力は表示されません。

文字「1」を出力する場合は、使用しているコード化スキームで「1」の値を検索できます。Unicodeでは、これは49です(ASCIIと同じ)。ただし、これは0〜9の数字に対してのみ機能します。

charではなくStringを使用し、Javaの組み込みtoString()メソッドを使用した方がよい場合があります。

int a = 1;
String b = toString(a);
System.out.println(b);

これは、システムエンコーディングが何であっても機能し、複数桁の番号でも機能します。


1
申し訳ありませんが、charはバイト数が異なるため、intではありません(クイック参照char-int表現-stackoverflow)。charは数値で表すことができますが、そうですが、整数ではありません。
morels

また、2行目は "String b = Integer.toString(a);"と表示されるはずです。
不良

charデータ型は、java.lang.Characterと、intおよびunicodeコードポイントおよびコード単位との関係で明確に定義されています
Ian

0

ASCIIコードに基づいてASCII文字を印刷したいが、それを超えたくない場合(Unicode文字など)、変数をバイトとして定義し、(char)変換を使用できます。つまり:

public static void main(String[] args) {
    byte b = 65;
    for (byte i=b; i<=b+25; i++) {
        System.out.print((char)i + ", ");
    }

ところで、文字「A」のASCIIコードは65です。


0

整数値がアルファベット/文字のASCII値であることを確認してください。

そうでない場合は、それを作ります。

for e.g. if int i=1

次に、64を追加して、65になるようにします。=「A」のASCII値。次に、

char x = (char)i;

print x

// 'A' will be printed 

0

プリミティブではなくクラスタイプについて話している場合は、次のトリックを実行する必要があります。

Integer someInt;
Character someChar;

someChar = (char)Integer.parseInt(String.valueOf(someInt));

その過程でそれを文字列にする必要はありません、そしてあなたは括弧の数が一致していません。
Simon Forsberg、

サイモン、「かっこ」。その後、どのように助言しますか?
18:06のmatua

-1

完全な変換の概念については、次のプログラムをご覧ください

class typetest{
    public static void main(String args[]){
        byte a=1,b=2;
        char c=1,d='b';
        short e=3,f=4;
        int g=5,h=6;
        float i;
        double k=10.34,l=12.45;
        System.out.println("value of char variable c="+c);
        // if we assign an integer value in char cariable it's possible as above
        // but it's not possible to assign int value from an int variable in char variable 
        // (d=g assignment gives error as incompatible type conversion)
        g=b;
        System.out.println("char to int conversion is possible");
        k=g;
        System.out.println("int to double conversion is possible");
        i=h;
        System.out.println("int to float is possible and value of i = "+i);
        l=i;
        System.out.println("float to double is possible");
    }
}

希望、それは少なくとも何かを助けるでしょう


-2

文字を対応する整数に変換したい場合は、次のようにします。

int a = (int) 'a';
char b = (char) a;
System.out.println(b);

これは、ASCIIで正常に印刷できない項目があるために発生します。

たとえば、97〜122の数字は、小文字のa〜zに対応する整数です。


-2
public class String_Store_In_Array 
{
    public static void main(String[] args) 
    {
        System.out.println(" Q.37 Can you store string in array of integers. Try it.");

        String str="I am Akash";
        int arr[]=new int[str.length()];
        char chArr[]=str.toCharArray();
          char  ch;
        for(int i=0;i<str.length();i++)
        {

            arr[i]=chArr[i];
        }
        System.out.println("\nI have stored it in array by using ASCII value");
        for(int i=0;i<arr.length;i++)
        {

            System.out.print(" "+arr[i]);
        }
        System.out.println("\nI have stored it in array by using ASCII value to original content");
        for(int i=0;i<arr.length;i++)
        {
             ch=(char)arr[i];

            System.out.print(" "+ch);
        }
    }
}

2
コードダンプだけではなく、説明を入力してください。
ジュールデュポン

このコードのみの投稿は質問に答える可能性がありますが、なぜそうなるのかについての説明を追加してください。これは、将来のユーザーが自分の状況に対する答えを評価するのに役立ちます。
トムブランバーグ2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.