Java'da ASCII sayısal değerine karakter dönüştürme


174

O String name = "admin";
zaman yaparımString char = name.substring(0,1); //char="a"

charASCII değerini (97) dönüştürmek istiyorum, bunu java'da nasıl yapabilirim?


2
JW String charderleyecek. Değişkeni yeniden adlandırmak isteyebilirsinizString ch
Vikas Prasad

ASCII? İstediğinden emin misin? Java, Unicode karakter kümesinin UTF-16 karakter kodlamasını kullanır (tıpkı JavaScript, .NET, VBA, VB4 / 5/6, NCHAR, NVARCHAR, NTFS, Windows API, ... gibi). Cevaplar birkaç kategoriye ayrılır: ASCII hakkında açık bir şekilde cevap vermek, UTF-16 hakkında cevap vermek ve UTF-16'dan birkaç kısayol sıçraması ile ASCII hakkında cevap vermek (ve bazıları sadece yanlıştır).
Tom Blodget

Yanıtlar:


298

Çok basit. Sadece charbir int.

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

Sizin durumunuzda, önce Dizeden belirli bir Karakter almanız ve ardından onu atmanız gerekir.

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

Döküm açıkça gerekli olmasa da, okunabilirliği artırır.

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

4
@VKSingla - Gerekli olmadığını kabul etti, ancak okunabilirliği geliştirdi ve OP'nin anlaşılmasına yardımcı olacak.
SudoRahul

1
Neden başka bir karakter değişkeni oluşturmalıyız? Oyuncu kadrosunu isteseniz bile neden böyle yapmıyorsunuz? int ascii = (int)name.charAt(0);
Ricardo Cacheira

@RJ - Tamam ben bu konuda düşünmemişti
Ricardo Cacheira

9
ASCII karakterleri 0 - 127 arasında 7 bitlik kodlara sahiptir. Bu nedenle int. bayt herhangi bir kodu mükemmel bir şekilde saklayabilir.
Yahor

Int'yi char'a dönüştürmek istiyordum, döküm ipucu cevaptan başka bir şekilde yapmama yardımcı oldu.
Isidro Serrano Pineda

49

sadece farklı bir yaklaşım

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

bytes[0] a .. ve dolayısıyla tüm dizideki diğer karakterleri temsil eder.


20

Bunun yerine:

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

charAt()Yöntemi kullanmalısınız .

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

4
Sadece "char" Java ayrılmış bir kelime olduğunu hatırlamak için.
Soğuk

12

Java karakterleri ASCII karakterleri olmadığından, bunun nasıl yapılacağını gösteren birkaç yanıtın hepsi yanlıştır. Java, Unicode karakterlerin çok baytlı kodlamasını kullanır. Unicode karakter kümesi süper ASCII kümesidir. Bu nedenle, Java dizesinde ASCII'ye ait olmayan karakterler olabilir. Bu tür karakterlerin ASCII sayısal değeri yoktur, bu nedenle bir Java karakterinin ASCII sayısal değerinin nasıl alınacağını sormak cevapsızdır.

Ama bunu neden yine de yapmak istiyorsun? Bu değerle ne yapacaksın?

Java dizesini ASCII dizesine dönüştürmek için sayısal değer istiyorsanız, asıl soru "Java Dizesini ASCII olarak nasıl kodlayabilirim" dir. Bunun için nesneyi kullanın StandardCharsets.US_ASCII.


2
Mükemmel cevap. Tip döküm sadece doğru olmayan bir kısayoldur. Sevindim cevabınız başlangıçta geldi, böylece insanlar kavramı yanlış anlamıyor.
Karthik R

ASCII dizesini bilmemizin nedeni, Unicode verilerinin saf ASCII'yi başka bir yere yerleştirmesi gereken bir arka uç sürecine girmem ve Unicode olmayanları almam gerektiğidir. Genellikle kullanıcılar MS Word'den yapıştırma yaparken (örn. Eğri çift ve tek tırnak, uzun tire vb.). StandardCharsets.US_ASCII'den bahsetmek, doğru olan şeydir, ancak orijinal sorgulayıcıya nasıl kullanılacağını söylemez.
Tihamer

public static String displayAsciiCode (String s, boolean useStandard) {String r = ""; bayt [] ascii = null; eğer (useStandard) {ascii = s.getBytes (StandardCharsets.US_ASCII); (int i = 0; i <ascii.length; i ++) {bayt b = ascii [i]; r = r + "" + s.charAt (i) + "=" + (int) b; }} else {ascii = s.getBytes (); (int i = 0; i <ascii.length; i ++) {bayt b = ascii [i]; r = r + "" + Karakter. toString ((karakter) ascii [i]) + "=" + (int) b; }} dönüş r; }
Tihamer

Yukarıdakileri şununla çağırın: String string = "This“ is ”strange"; System.out.println ("strings =" + dize); System.out.println (displayAsciiCode (dize, true)); System.out.println (displayAsciiCode (dize, yanlış)); Sonuç: dizeler = Bu “garip” garip T = 84 h = 104 i = 105 s = 115 = 32 “= 63 i = 105 s = 115” = 63 = 32 s = 115 t = 116 r = 114 a = 97 n = 110 g = 103 e = 101 T = 84 sa = 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

Tüm dizeyi birleştirilmiş ASCII değerlerine dönüştürmek istiyorsanız bunu kullanabilirsiniz -

    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);

burada çıktı olarak 979899 elde edersiniz.

Kredi bu .

Başkalarına uygun olması için buraya kopyaladım.


5

Karakteri int'ye dönüştürün.

    String name = "admin";
    int ascii = name.toCharArray()[0];

Ayrıca :

int ascii = name.charAt(0);

3

Sadece bir int için karakter.

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

Değeri number97 olacaktır.


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
Bu kod snippet'i soruyu çözebilir, ancak bir açıklama da dahil olmak üzere , yayınınızın kalitesini artırmaya yardımcı olur. Gelecekte okuyucular için soruyu cevapladığınızı ve bu kişilerin kod önerinizin nedenlerini bilmeyebileceğini unutmayın.
DimaSan

1

Çok basit, istediğiniz karakteri alın ve int'e dönüştürün.

String name = "admin";
int ascii = name.charAt(0);

1

Bu zaten çeşitli şekillerde cevap verildi biliyorum ama burada tüm karakterler üzerinden gitmek için bir bakış ile kod biraz.

İşte sınıfla başlayan kod

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 için Unicode kullanır stringve char. Unicode'daki bir metin birimi, temel kod noktası ve ardından sıfır veya daha fazla kod noktasını birleştiren bir grafiktir. Java'da bir kod noktası, bir kod noktası için bir veya iki 16 bit kod birimi ( char) gerektirebilecek UTF-16'da kodlanmıştır . Kod noktalarını yinelemek için bu cevaba bakınız . Kod, örneğin, INDEX VE ORTA PARMAKLARIN ÇAPINDA kod noktası ile yaklaşan U + 1F91E EL için zaten hazır olmalıdır.
Tom Blodget

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);

Bu kod soruyu cevaplayabilirken, ne yaptığını açıklamak ve ona bazı referanslar eklemek daha iyidir.
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'ın belirttiği gibi, Java'nın Unicode'u ASCII değerini almak için tüm karakterlere hitap etmiyor. Doğru yol (Java 1.7+) aşağıdaki gibidir:

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

new String(byte[])başka bir karakter kodlaması kullanır - zamana, makinelere ve kullanıcılara göre değişen sistem varsayılanı; neredeyse hiç işe yaramaz. Aradığın asciiStringşey hala UTF-16 çünkü Java'nın hepsi bu.
Tom Blodget

@ TomBlodget, katılıyorum. Ama bence OP belirli bir karakterin ASCII temsilini nasıl alacağını bilmek istiyordu. Java ham ASCII yapamayacağı için bu sadece bir kodlama
Karthik R

1

Bunun için kolay bir yol:

    int character = 'a';

"Karakter" yazdırırsanız, 97 alırsınız.


1

Veya Java 1.8'den başlayarak 1 karakter veya Dize için Akış API'sını kullanabilirsiniz:

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

1

Java 9 => String.chars () kullanarak

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

çıktı - [115, 116, 97, 99, 107, 111, 118, 101, 114, 102, 108, 111, 119]


0

ASCII'nin numarasını bu kodla kontrol edebilirsiniz.

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

Eğer yanılıyorsam özür dilerim.


0

Bir Dizedeki tüm karakterlerin ASCII değerini istiyorsanız. Bunu kullanabilirsiniz:

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

ve bir String'de tek bir karakterin ASCII'sini isterseniz şu yoldan gidebilirsiniz:

(int)a.charAt(index);

0

Aynı şeyi deniyordum, ama en iyi ve kolay çözüm charAt kullanmak ve dizinlere erişmek için biz [128] boyutunda bir tamsayı dizi oluşturmak gerekir.

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.

Dize'nin tamamının ascii değerlerini görüntülemek istiyorsanız, bunu yapmanız gerekir.

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

Bu durumda çıktınız şöyle olacaktır: a'nın Ascii değeri: 97 d'nin Ascii değeri: 100 Ascii değeri m: 109 Ascii değeri i: 105 Ascii değeri n: 110


0

Bunu yapmanın kolay yolu:

ASCII'ye tüm String için:


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]);
      }
    }
}


Çıktı:

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


Burada, abc.charAt(i)String dizisinin tek karakterini verir: Her karakteri tamsayı tipine atadığımızda, derleyici tür dönüşümü yapar,

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

Ancak, tek bir karakter için:

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


0

Bunun için String classe

    input.codePointAt(index);

Ben java 8 örneğin "abcde" to "979899100101" kullanarak, karşılık gelen ascii kodlarına dönüştürülen dize bütün almak için bir öneri daha vermek istiyorum.

    String input = "abcde";
    System.out.println(
            input.codePoints()
                    .mapToObj((t) -> "" + t)
                    .collect(joining()));
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.