Javaで文字をASCII数値に変換します


174

私はString name = "admin";
しましたString char = name.substring(0,1); //char="a"

charASCII値(97)に変換したいのですが、Javaでこれを行うにはどうすればよいですか?


2
JWはString charコンパイルされます。あなたは、変数の名前を変更したいかもしれString ch
ヴィカスプラサド

ASCII?それでよろしいですか?Javaは、Unicode文字セットのUTF-16文字エンコードを使用します(JavaScript、.NET、VBA、VB4 / 5/6、NCHAR、NVARCHAR、NTFS、Windows APIなどと同様)。回答はいくつかのカテゴリに分類されます。ASCIIについて明示的に回答すること、UTF-16について回答すること、およびUTF-16からのいくつかのショートカットを介してASCIIについて回答することです(また、いくつかはまったく間違っています)。
トムブロジェット

回答:


295

とても簡単です。ちょうどあなたをキャストcharとしてint

char character = 'a';    
int ascii = (int) character;

あなたのケースでは、最初に文字列から特定の文字を取得してからキャストする必要があります。

char character = name.charAt(0); // This gives the character 'a'
int ascii = (int) character; // ascii is now 97.

キャストは明示的には必要ありませんが、読みやすさが向上します。

int ascii = character; // Even this will do the trick.

4
@VKSingla-必要ないことに同意しましたが、読みやすさが向上し、OPの理解に役立ちます。
SudoRahul、2013年

1
なぜ別のchar変数を作成するのですか?キャストが必要な場合でも、このようにしないでください。int ascii = (int)name.charAt(0);
Ricardo Cacheira 2013年

@RJ-わかりませんでした
Ricardo Cacheira 2013年

9
ASCII文字には0〜127の7ビットコードがあります。したがって、intを使用する必要はありません。バイトはあらゆるコードを完全に保存できます。
Yahor、2015年

私はintをcharに変換しようとしていましたが、キャストヒントは、答えから逆の方法でそれを行うのに役立ちました。
イシドロセラーノピネダ

49

ただ違うアプローチ

    String s = "admin";
    byte[] bytes = s.getBytes("US-ASCII");

bytes[0] a ..のasciiを表し、配列全体の他の文字を表します。


20

これの代わりに:

String char = name.substring(0,1); //char="a"

charAt()メソッドを使用する必要があります。

char c = name.charAt(0); // c='a'
int ascii = (int)c;

4
「char」はJavaの予約語であることを覚えておいてください。
寒さ

12

Javaの文字はASCII文字ではないため、これを行う方法を示すとするいくつかの回答はすべて間違っています。Javaは、Unicode文字のマルチバイトエンコーディングを使用します。Unicode文字セットは、ASCIIのスーパーセットです。したがって、ASCIIに属さない文字がJava文字列に含まれる可能性があります。このような文字にはASCII数値がないため、Java文字のASCII数値を取得する方法を尋ねることはできません。

しかし、なぜこれをとにかくしたいのですか?あなたはその価値をどうするつもりですか?

Java文字列をASCII文字列に変換できるように数値が必要な場合、実際の問題は「Java文字列をASCIIとしてエンコードする方法」です。そのためには、オブジェクトを使用しますStandardCharsets.US_ASCII


2
完璧な答え。型キャストは、正確ではない単なるショートカットです。あなたの答えが最初に来てうれしいので、人々は概念を誤解しないでください。
Karthik R

ASCII文字列を知る必要があるのは、純粋なASCIIを別の場所に配置する必要があるバックエンドプロセスにUnicodeデータが入り、非Unicodeを取得する必要があるためです。通常、ユーザーがMS Wordからコピーして貼り付けている場合(たとえば、二重引用符や一重引用符、長いダッシュなど)。StandardCharsets.US_ASCIIに言及するのは正しいことですが、元の質問者にそれを使用する方法を伝えていません。
Tihamer

public static String displayAsciiCode(String s、boolean useStandard){String r = ""; byte [] ascii = null; if(useStandard){ascii = s.getBytes(StandardCharsets.US_ASCII); for(int i = 0; i <ascii.length; i ++){バイトb = ascii [i]; r = r + "" + s.charAt(i)+ "=" +(int)b; }} else {ascii = s.getBytes(); for(int i = 0; i <ascii.length; i ++){バイトb = ascii [i]; r = r + "" + Character.toString((char)ascii [i])+ "=" +(int)b; }} return r; }
ティハマー

上記を次のように呼び出します:String string = "This" is "strange"; System.out.println( "strings =" + string); System.out.println(displayAsciiCode(string、true)); System.out.println(displayAsciiCode(string、false)); 結果は次のようになります。 97 n = 110 g = 103 e = 101 T = 84 h = 104 i = 105 s = 115 = 32 ¬ = -30 タ = -128 ワ = -100 i = 105 s = 115 ¬ = -30 タ = -128ン = -99 = 32 s = 115 t = 116 r = 114 a = 97 n = 110 g = 103 e = 101
Tihamer

10

文字列全体を連結されたASCII値に変換したい場合は、これを使用できます-

    String str = "abc";  // or anything else

    StringBuilder sb = new StringBuilder();
    for (char c : str.toCharArray())
    sb.append((int)c);

    BigInteger mInt = new BigInteger(sb.toString());
    System.out.println(mInt);

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

功績これ

他の人が使いやすいように、ここにコピーしました。



3

charをintにキャストするだけです。

char character = 'a';
int number = (int) character;

の値はnumber97 になります。


2
public class Ascii {
    public static void main(String [] args){
        String a=args[0];
        char [] z=a.toCharArray();
        for(int i=0;i<z.length;i++){ 
            System.out.println((int)z[i]);
        }
    }
}

3
このコードスニペットは質問を解決する可能性がありますが、説明を含めると、投稿の品質を向上させるのに役立ちます。あなたは将来の読者のための質問に答えていることを覚えておいてください、そしてそれらの人々はあなたのコード提案の理由を知らないかもしれません。
DimaSan 2017年


1

これはすでにいくつかの形式で回答されていることはわかっていますが、すべての文字を確認するためのコードを以下に示します。

これがクラスで始まるコードです

public class CheckChValue {  // Class name
public static void main(String[] args) { // class main

    String name = "admin"; // String to check it's value
    int nameLenght = name.length(); // length of the string used for the loop

    for(int i = 0; i < nameLenght ; i++){   // while counting characters if less than the length add one        
        char character = name.charAt(i); // start on the first character
        int ascii = (int) character; //convert the first character
        System.out.println(character+" = "+ ascii); // print the character and it's value in ascii
    }
}

}


1
JavaはstringおよびにUnicodeを使用しますchar。Unicodeのテキスト単位は書記素です。書記素は、基本コードポイントの後に0個以上の結合コードポイントが続きます。Javaでは、コードポイントはUTF-16でエンコードされます。これには、コードポイントに1つまたは2つの16ビットコード単位(char)が必要になる場合があります。コードポイントを反復するには、この回答を参照してください。たとえば、コードはすでに注目されているU + 1F91E HAND WITH INDEX AND MIDDLE FINGERS CROSSEDコードポイントの準備ができているはずです。
トムブロジェット2016年

1
String str = "abc";  // or anything else

// Stores strings of integer representations in sequence
StringBuilder sb = new StringBuilder();
for (char c : str.toCharArray())
    sb.append((int)c);

 // store ascii integer string array in large integer
BigInteger mInt = new BigInteger(sb.toString());
System.out.println(mInt);

このコードは質問に答えることがありますが、それが何をするかを説明し、それにいくつかの参照を追加することをお勧めします。
Hamid Pourjam

1
String name = "admin";
char[] ch = name.toString().toCharArray(); //it will read and store each character of String and store into char[].

for(int i=0; i<ch.length; i++)
{
    System.out.println(ch[i]+
                       "-->"+
                       (int)ch[i]); //this will print both character and its value
}

1

@Raedwaldが指摘したように、JavaのUnicodeはASCII値を取得するためにすべての文字に対応するわけではありません。正しい方法(Java 1.7以降)は次のとおりです。

byte[] asciiBytes = "MyAscii".getBytes(StandardCharsets.US_ASCII);
String asciiString = new String(asciiBytes);
//asciiString = Arrays.toString(asciiBytes)

new String(byte[])さらに別の文字エンコーディング、いわゆるシステムデフォルトを使用します。これは、時間、マシン、およびユーザーによって異なります。ほとんど役に立ちません。asciiStringJavaが持っているものはすべてUTF-16なので、あなたが呼ぶのはまだUTF-16です。
トムブロジェット

@TomBlodget、同意する。しかし、私はOPが与えられた文字のASCII表現を取得する方法を知りたかったと思います。javaは生のASCIIを実行できないため、これは単なるエンコーディングです。
カルティクR

1

これを簡単に行う方法は次のとおりです。

    int character = 'a';

「キャラクター」を印刷すると97になります。


1

または、Java 1.8で始まる1文字または文字列にStream APIを使用できます。

public class ASCIIConversion {
    public static void main(String[] args) {
        String text = "adskjfhqewrilfgherqifvehwqfjklsdbnf";
        text.chars()
                .forEach(System.out::println);
    }
}

1

Java 9を使用する=> String.chars()

String input = "stackoverflow";
System.out.println(input.chars().boxed().collect(Collectors.toList()));

出力-[115、116、97、99、107、111、118、101、114、102、108、111、119]


0

このコードでASCIIの番号を確認できます。

String name = "admin";
char a1 = a.charAt(0);
int a2 = a1;
System.out.println("The number is : "+a2); // the value is 97

私が間違っているとすみません。


0

文字列内のすべての文字のASCII値が必要な場合。あなたはこれを使うことができます:

String a ="asdasd";
int count =0;
for(int i : a.toCharArray())
    count+=i;

そして、あなたが文字列の単一の文字のASCIIが欲しいなら、あなたは行くことができます:

(int)a.charAt(index);

0

私も同じことを試していましたが、charAtを使用してインデックスにアクセスし、[128]サイズの整数配列を作成するのが最善で簡単な解決策です。

String name = "admin"; 
int ascii = name.charAt(0); 
int[] letters = new int[128]; //this will allocate space with 128byte size.
letters[ascii]++; //increments the value of 97 to 1;
System.out.println("Output:" + ascii); //Outputs 97
System.out.println("Output:" +  letters[ascii]); //Outputs 1 if you debug you'll see 97th index value will be 1.

完全な文字列のASCII値を表示する場合は、これを行う必要があります。

String name = "admin";
char[] val = name.toCharArray();
for(char b: val) {
 int c = b;
 System.out.println("Ascii value of " + b + " is: " + c);
}

この場合、出力は次のようになります。aのASCII値は次のとおりです。97dのASCII値は次のとおりです。100mのASCII値は次のとおりです:109 iのASCII値:105 nのASCII値は:110


0

これを行う簡単な方法は次のとおりです。

文字列全体をASCIIに変換する場合:


public class ConvertToAscii{
    public static void main(String args[]){
      String abc = "admin";
      int []arr = new int[abc.length()];
      System.out.println("THe asscii value of each character is: ");
      for(int i=0;i<arr.length;i++){
          arr[i] = abc.charAt(i); // assign the integer value of character i.e ascii
          System.out.print(" "+arr[i]);
      }
    }
}


出力は次のとおりです。

THe asscii value of each character is: 97 100 109 105 110


ここでabc.charAt(i)は、文字列配列の単一の文字を示します。各文字を整数型に割り当てると、コンパイラは次のように型変換を行います。

arr[i] = (int) character // Here, every individual character is coverted in ascii value

ただし、1文字の場合:

String name = admin; asciiValue = (int) name.charAt(0);// for character 'a' System.out.println(asciiValue);


0

このため、すぐに文字列クラスを使用できます

    input.codePointAt(index);

「abcde」から「979899100101」などのjava 8を使用して、文字列全体を対応するASCIIコードに変換することについて、もう1つ提案をしたいと思います。

    String input = "abcde";
    System.out.println(
            input.codePoints()
                    .mapToObj((t) -> "" + t)
                    .collect(joining()));
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.