Konversi karakter ke nilai numerik ASCII dalam java

174

Saya punya String name = "admin";
kemudian saya lakukanString char = name.substring(0,1); //char="a"

Saya ingin mengonversi charke nilai ASCII (97), bagaimana saya bisa melakukan ini di java?

Celta
sumber
2
JW akan String charpernah dikompilasi. Mungkin Anda ingin mengubah nama variabel menjadiString ch
Vikas Prasad
ASCII? Apakah Anda yakin itu yang Anda inginkan? Java menggunakan pengkodean karakter UTF-16 dari rangkaian karakter Unicode (seperti halnya JavaScript, .NET, VBA, VB4 / 5/6, NCHAR, NVARCHAR, NTFS, Windows API, ...). Jawabannya terbagi dalam beberapa kategori: menjawab tentang ASCII secara eksplisit, menjawab tentang UTF-16 dan menjawab tentang ASCII melalui beberapa lompatan pintas dari UTF-16 (dan juga ada yang salah).
Tom Blodget

Jawaban:

297

Sangat sederhana. Hanya melemparkan Anda charsebagai int.

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

Dalam kasus Anda, Anda harus mendapatkan Karakter spesifik dari String terlebih dahulu dan kemudian melemparkannya.

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

Meskipun pemeran tidak diperlukan secara eksplisit, tetapi pemerannya meningkatkan keterbacaan.

int ascii = character; // Even this will do the trick.
SudoRahul
sumber
4
@VKSingla - Menyetujui tidak diperlukan, tetapi meningkatkan keterbacaan dan akan membantu OP dalam memahami.
SudoRahul
1
Mengapa membuat variabel char lain? Bahkan jika Anda ingin para pemeran mengapa tidak melakukan ini? int ascii = (int)name.charAt(0);
Ricardo Cacheira
@RJ - ok saya tidak memikirkannya
Ricardo Cacheira
9
Karakter ASCII memiliki kode 7-bit dari 0 hingga 127. Jadi tidak perlu menggunakan int. byte dapat dengan sempurna menyimpan kode apa pun.
Yahor
Saya mencari untuk mengubah int menjadi char, petunjuk pemain membantu saya melakukannya sebaliknya dari jawabannya.
Isidro Serrano Pineda
49

hanya pendekatan yang berbeda

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

bytes[0] akan mewakili ascii dari .. dan dengan demikian karakter lain di seluruh array.

stinepike
sumber
20

Alih-alih ini:

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

Anda harus menggunakan charAt()metode ini.

char c = name.charAt(0); // c='a'
int ascii = (int)c;
christopher
sumber
4
Hanya untuk mengingat bahwa "char" adalah kata khusus di Jawa.
Dingin
12

Beberapa jawaban yang dimaksudkan untuk menunjukkan bagaimana melakukan ini semua salah karena karakter Java bukan karakter ASCII. Java menggunakan pengkodean multibyte karakter Unicode. Set karakter Unicode adalah set super ASCII. Jadi bisa ada karakter dalam string Java yang bukan milik ASCII. Karakter seperti itu tidak memiliki nilai numerik ASCII, jadi bertanya bagaimana cara mendapatkan nilai numerik ASCII dari karakter Java tidak bisa dijawab.

Tetapi mengapa Anda tetap ingin melakukan ini? Apa yang akan Anda lakukan dengan nilainya?

Jika Anda menginginkan nilai numerik sehingga Anda dapat mengonversi String Java ke string ASCII, pertanyaan sebenarnya adalah "bagaimana cara menyandikan String Java sebagai ASCII". Untuk itu, gunakan objek StandardCharsets.US_ASCII.

Raedwald
sumber
2
Jawaban sempurna. Tipe casting hanya jalan pintas yang tidak akurat. Senang jawaban Anda datang di awal sehingga orang tidak salah paham konsep.
Karthik R
Alasan saya harus tahu string ASCII adalah karena saya punya data Unicode yang masuk ke proses backend yang perlu menempatkan ASCII murni di tempat lain, dan saya perlu ketika saya mendapatkan non-Unicode. Biasanya ketika pengguna menyalin paste dari MS Word (mis. Kutipan bengkok dan tunggal, tanda hubung panjang, dll.). Menyebut StandardCharsets.US_ASCII adalah hal yang benar untuk dilakukan, tetapi itu tidak memberi tahu penanya asli bagaimana cara menggunakannya.
Tihamer
public String displayAsciiCode statis (String s, boolean useStandard) {String r = ""; byte [] ascii = null; if (useStandard) {ascii = s.getBytes (StandardCharsets.US_ASCII); untuk (int i = 0; i <ascii.length; i ++) {byte b = ascii [i]; r = r + "" + s.charAt (i) + "=" + (int) b; }} else {ascii = s.getBytes (); untuk (int i = 0; i <ascii.length; i ++) {byte b = ascii [i]; r = r + "" + Character.toString ((char) ascii [i]) + "=" + (int) b; }} return r; }
Tihamer
Panggil yang di atas dengan: String string = "This" is "odd"; System.out.println ("string =" + string); System.out.println (displayAsciiCode (string, true)); System.out.println (displayAsciiCode (string, false)); Hasilnya adalah: string = Ini "adalah" aneh T = 84 jam = 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 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

Jika Anda ingin mengonversi seluruh string menjadi nilai ASCII bersambung maka Anda dapat menggunakan ini -

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

dimana kamu akan mendapatkan 979899 sebagai output.

Penghargaan untuk ini .

Saya hanya menyalinnya di sini sehingga akan nyaman bagi orang lain.

pengguna1721904
sumber
5

Ubah char menjadi int.

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

Juga:

int ascii = name.charAt(0);
Vineet Singla
sumber
3

Hanya melemparkan arang ke int.

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

Nilai numberakan menjadi 97.

Daniel Lerps
sumber
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]);
        }
    }
}
yeswanth g
sumber
3
Sementara potongan kode ini dapat menyelesaikan pertanyaan, termasuk penjelasan sangat membantu untuk meningkatkan kualitas posting Anda. Ingatlah bahwa Anda menjawab pertanyaan untuk pembaca di masa depan, dan orang-orang itu mungkin tidak tahu alasan untuk saran kode Anda.
DimaSan
1

Sederhana, dapatkan karakter yang Anda inginkan, dan konversikan ke int.

String name = "admin";
int ascii = name.charAt(0);
Ricardo Cacheira
sumber
1

Saya tahu ini sudah dijawab dalam beberapa bentuk tetapi di sini ada sedikit kode saya dengan pandangan untuk memeriksa semua karakter.

Ini kodenya, dimulai dengan kelas

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
    }
}

}


sumber
1
Java menggunakan Unicode untuk stringdan char. Unit tekstual di Unicode adalah grapheme, yang merupakan basis kode dasar diikuti oleh nol atau lebih gabungan titik kode. Codepoint, di Jawa, dikodekan dalam UTF-16, yang bisa memerlukan satu atau dua unit kode 16-bit ( char) untuk codepoint. Untuk mengulangi codepoint, lihat jawaban ini . Kode harus sudah siap untuk TANGAN U + 1F91E yang akan datang dengan INDEX DAN FINGER MIDDLE CROSSED codepoint, misalnya.
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);
Sandeepp Sah
sumber
Meskipun kode ini dapat menjawab pertanyaan, lebih baik menjelaskan apa yang dilakukannya dan menambahkan beberapa referensi ke dalamnya.
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
}
iAsghar Hussain
sumber
1

Seperti @Raedwald tunjukkan, Java's Unicode tidak melayani semua karakter untuk mendapatkan nilai ASCII. Cara yang benar (Java 1.7+) adalah sebagai berikut:

byte[] asciiBytes = "MyAscii".getBytes(StandardCharsets.US_ASCII);
String asciiString = new String(asciiBytes);
//asciiString = Arrays.toString(asciiBytes)
Karthik R
sumber
new String(byte[])menggunakan pengkodean karakter lain — yang disebut sistem default, yang bervariasi menurut waktu, mesin, dan pengguna; hampir tidak pernah berguna. Yang Anda panggil asciiStringmasih UTF-16 karena hanya itu yang dimiliki Java.
Tom Blodget
@ TomBlodget, saya setuju. Tapi saya pikir OP ingin tahu bagaimana mendapatkan representasi ASCII dari karakter yang diberikan. Ini hanya penyandian karena java tidak dapat melakukan ASCII mentah
Karthik R
1

Cara mudah untuk ini adalah:

    int character = 'a';

Jika Anda mencetak "karakter", Anda mendapatkan 97.

ktlawal
sumber
1

Atau Anda dapat menggunakan Stream API untuk 1 karakter atau String yang dimulai di Java 1.8:

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

menggunakan Java 9 => String.chars ()

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

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

Anurag_BEHS
sumber
0

Anda dapat memeriksa nomor ASCII dengan kode ini.

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

Jika saya salah, permintaan maaf.

Raúl Vela
sumber
0

Jika Anda ingin nilai ASCII dari semua karakter dalam sebuah String. Anda bisa menggunakan ini:

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

dan jika Anda ingin ASCII dari satu karakter dalam sebuah String, Anda dapat memilih:

(int)a.charAt(index);
Vikram Singh
sumber
0

Saya mencoba hal yang sama, tetapi solusi terbaik dan mudah adalah dengan menggunakan karakter dan untuk mengakses indeks kita harus membuat array integer dengan ukuran [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.

Jika Anda ingin menampilkan nilai ascii dari String lengkap, Anda perlu melakukan ini.

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

Output Anda, dalam hal ini, akan menjadi: Nilai Ascii dari is is: 97 Nilai ascii dari d adalah: 100 Nilai ascii dari m adalah: 109 Nilai ascii dari i adalah: 105 Nilai ascii dari n adalah: 110

Siddhartha Thota
sumber
0

Cara mudah untuk melakukan ini adalah:

Untuk seluruh String ke 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]);
      }
    }
}


Outputnya adalah:

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


Di sini, abc.charAt(i)berikan karakter tunggal dari array String: Ketika kita menetapkan setiap karakter ke tipe integer, kompiler melakukan konversi tipe sebagai,

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

Tapi, untuk karakter tunggal:

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

susan097
sumber
0

Untuk ini kita bisa langsung menggunakan class String

    input.codePointAt(index);

Saya ingin memberikan satu saran lagi agar seluruh string dikonversi ke kode ascii yang sesuai, menggunakan java 8 misalnya, "abcde" menjadi "979899100101".

    String input = "abcde";
    System.out.println(
            input.codePoints()
                    .mapToObj((t) -> "" + t)
                    .collect(joining()));
piyush tyagi
sumber