Konvertieren Sie das Zeichen in Java in einen numerischen ASCII-Wert

174

Ich habe String name = "admin";
dann ichString char = name.substring(0,1); //char="a"

Ich möchte das charin seinen ASCII-Wert (97) konvertieren. Wie kann ich das in Java tun?

Celta
quelle
2
JW wird String charjemals kompilieren. Vielleicht möchten Sie die Variable umbenennen inString ch
Vikas Prasad
ASCII? Bist du sicher, dass du das willst? Java verwendet die UTF-16-Zeichenkodierung des Unicode-Zeichensatzes (genau wie JavaScript, .NET, VBA, VB4 / 5/6, NCHAR, NVARCHAR, NTFS, Windows-API usw.). Die Antworten lassen sich in mehrere Kategorien einteilen: explizite Beantwortung von ASCII, Beantwortung von UTF-16 und Beantwortung von ASCII über mehrere Verknüpfungen von UTF-16 (und auch einige sind einfach falsch).
Tom Blodget

Antworten:

295

Sehr einfach. Wirf deine einfach charals int.

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

In Ihrem Fall müssen Sie zuerst das bestimmte Zeichen aus der Zeichenfolge abrufen und dann umwandeln.

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

Cast ist zwar nicht explizit erforderlich, verbessert aber die Lesbarkeit.

int ascii = character; // Even this will do the trick.
SudoRahul
quelle
4
@VKSingla - Einverstanden, dass es nicht erforderlich ist, aber es verbessert die Lesbarkeit und hilft dem OP beim Verständnis.
SudoRahul
1
Warum eine andere char-Variable erstellen? Auch wenn Sie die Besetzung wollen, warum nicht so? int ascii = (int)name.charAt(0);
Ricardo Cacheira
@RJ - ok ich hatte nicht darüber nachgedacht
Ricardo Cacheira
9
ASCII-Zeichen haben 7-Bit-Codes von 0 bis 127. Sie müssen also nicht int verwenden. Byte kann jeden Code perfekt speichern.
Yahor
Ich wollte das int in char konvertieren, der Cast-Hinweis half mir, es anders herum zu machen als die Antwort.
Isidro Serrano Pineda
49

nur ein anderer Ansatz

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

bytes[0] wird ascii von a .. und damit die anderen Zeichen im gesamten Array darstellen.

Stinepike
quelle
20

An Stelle von:

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

Sie sollten die charAt()Methode verwenden.

char c = name.charAt(0); // c='a'
int ascii = (int)c;
Christopher
quelle
4
Nur um sich daran zu erinnern, dass "char" in Java ein reserviertes Wort ist.
Kalt
12

Die verschiedenen Antworten, die zeigen sollen, wie dies zu tun ist, sind alle falsch, da Java-Zeichen keine ASCII-Zeichen sind. Java verwendet eine Multibyte-Codierung von Unicode-Zeichen. Der Unicode-Zeichensatz ist ein Super-Satz von ASCII. Es kann also Zeichen in einer Java-Zeichenfolge geben, die nicht zu ASCII gehören. Solche Zeichen haben keinen numerischen ASCII-Wert. Daher ist es nicht möglich zu fragen, wie der numerische ASCII-Wert eines Java-Zeichens ermittelt werden kann.

Aber warum willst du das überhaupt tun? Was machst du mit dem Wert?

Wenn Sie den numerischen Wert verwenden möchten, damit Sie den Java-String in einen ASCII-String konvertieren können, lautet die eigentliche Frage "Wie codiere ich einen Java-String als ASCII?". Verwenden Sie dazu das Objekt StandardCharsets.US_ASCII.

Raedwald
quelle
2
Perfekte Antwort. Typguss ist nur eine Abkürzung, die nicht genau ist. Ich bin froh, dass Ihre Antwort am Anfang kam, damit die Leute das Konzept nicht falsch verstehen.
Karthik R
Der Grund, warum ich die ASCII-Zeichenfolge kennen muss, ist, dass Unicode-Daten in einen Backend-Prozess eingehen, der reines ASCII an einer anderen Stelle platzieren muss, und dies muss ich tun, wenn ich Nicht-Unicode erhalte. Normalerweise, wenn Benutzer das Einfügen aus MS Word kopieren (z. B. gekrümmte doppelte und einfache Anführungszeichen, lange Striche usw.). StandardCharsets.US_ASCII zu erwähnen ist das Richtige, aber das sagt dem ursprünglichen Fragesteller nicht, wie er es verwenden soll.
Tihamer
öffentlicher statischer String displayAsciiCode (String s, boolean useStandard) {String r = ""; Byte [] ascii = null; if (useStandard) {ascii = s.getBytes (StandardCharsets.US_ASCII); für (int i = 0; i <ascii.length; i ++) {Byte b = ascii [i]; r = r + + s.charAt (i) + = + (int) b; }} else {ascii = s.getBytes (); für (int i = 0; i <ascii.length; i ++) {Byte b = ascii [i]; r = r + "" + Character.toString ((char) ascii [i]) + "=" + (int) b; }} return r; }
Tihamer
Rufen Sie das Obige auf mit: String string = "Dies" ist "seltsam"; System.out.println ("strings =" + string); System.out.println (displayAsciiCode (string, true)); System.out.println (displayAsciiCode (string, false)); Das Ergebnis ist: Strings = Dies ist seltsam 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 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

Wenn Sie die gesamte Zeichenfolge in verkettete ASCII-Werte konvertieren möchten, können Sie Folgendes verwenden:

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

wobei Sie 979899 als Ausgabe erhalten.

Gutschrift dafür .

Ich habe es hier nur kopiert, damit es für andere bequem ist.

user1721904
quelle
5

Konvertieren Sie das Zeichen in int.

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

Ebenfalls :

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

Wirf den Char einfach auf einen Int.

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

Der Wert von numberwird 97 sein.

Daniel Lerps
quelle
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
quelle
3
Während dieses Code-Snippet die Frage lösen kann, hilft eine Erklärung wirklich, die Qualität Ihres Beitrags zu verbessern. Denken Sie daran, dass Sie die Frage für Leser in Zukunft beantworten und diese Personen möglicherweise die Gründe für Ihren Codevorschlag nicht kennen.
DimaSan
1

Es ist ganz einfach, holen Sie sich den gewünschten Charakter und konvertieren Sie ihn in int.

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

Ich weiß, dass dies bereits in verschiedenen Formen beantwortet wurde, aber hier ist mein Code mit einem Blick auf alle Zeichen.

Hier ist der Code, der mit der Klasse begonnen hat

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

}}


quelle
1
Java verwendet Unicode für stringund char. Eine Texteinheit in Unicode ist ein Graphem, bei dem es sich um einen Basiscodepunkt handelt, gefolgt von null oder mehr kombinierten Codepunkten. Ein Codepunkt in Java ist in UTF-16 codiert, was eine oder zwei 16-Bit-Codeeinheiten ( char) für einen Codepunkt erfordern könnte . Informationen zum Iterieren von Codepunkten finden Sie in dieser Antwort . Der Code sollte beispielsweise bereits für den aufstrebenden Codepoint U + 1F91E HAND WITH INDEX AND MIDDLE FINGERS CROSSED bereit sein.
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
quelle
Während dieser Code die Frage beantworten kann, ist es besser zu erklären, was er tut, und einige Verweise darauf hinzuzufügen.
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
quelle
1

Wie @Raedwald hervorhob, berücksichtigt Javas Unicode nicht alle Zeichen, um den ASCII-Wert zu erhalten. Der richtige Weg (Java 1.7+) ist wie folgt:

byte[] asciiBytes = "MyAscii".getBytes(StandardCharsets.US_ASCII);
String asciiString = new String(asciiBytes);
//asciiString = Arrays.toString(asciiBytes)
Karthik R.
quelle
new String(byte[])verwendet noch eine weitere Zeichenkodierung - den sogenannten Systemstandard, der sich je nach Zeit, Computer und Benutzer ändert. fast nie nützlich. Was Sie nennen, asciiStringist immer noch UTF-16, weil das alles ist, was Java hat.
Tom Blodget
@ TomBlodget, ich stimme zu. Aber ich denke, OP wollte wissen, wie man die ASCII-Darstellung eines bestimmten Charakters erhält. Dies ist nur eine Codierung, da Java kein rohes ASCII ausführen kann
Karthik R
1

Ein einfacher Weg dafür ist:

    int character = 'a';

Wenn Sie "Zeichen" drucken, erhalten Sie 97.

ktlawal
quelle
1

Oder Sie können die Stream-API für 1 Zeichen oder einen String ab Java 1.8 verwenden:

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

mit Java 9 => String.chars ()

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

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

Anurag_BEHS
quelle
0

Mit diesem Code können Sie die ASCII-Nummer überprüfen.

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

Wenn ich falsch liege, entschuldige ich mich.

Raúl Vela
quelle
0

Wenn Sie den ASCII-Wert aller Zeichen in einem String möchten. Sie können dies verwenden:

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

und wenn Sie ASCII eines einzelnen Zeichens in einem String möchten, können Sie Folgendes wählen:

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

Ich habe das Gleiche versucht, aber die beste und einfachste Lösung wäre, charAt zu verwenden und auf die Indizes zuzugreifen. Wir sollten ein ganzzahliges Array mit der Größe [128] erstellen.

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.

Wenn Sie ASCII-Werte der vollständigen Zeichenfolge anzeigen möchten, müssen Sie dies tun.

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

Ihre Ausgabe ist in diesem Fall: Ascii-Wert von a ist: 97 Ascii-Wert von d ist: 100 Ascii-Wert von m ist: 109 Ascii-Wert von i ist: 105 Ascii-Wert von n ist: 110

Siddhartha Thota
quelle
0

Der einfache Weg, dies zu tun, ist:

Für den gesamten String in 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]);
      }
    }
}


Die Ausgabe ist:

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


Hier abc.charAt(i)gibt das einzelne Zeichen von String - Array: Wenn wir jedes Zeichen Integer - Typ dann zuweisen, die Compiler tun Typumwandlung als,

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

Aber für einen einzelnen Charakter:

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

susan097
quelle
0

Dafür könnten wir sofort String-Klassen verwenden

    input.codePointAt(index);

Ich möchte noch einen Vorschlag machen, wie die gesamte Zeichenfolge in entsprechende ASCII-Codes konvertiert werden soll, wobei Java 8 verwendet wird, z. B. "abcde" bis "979899100101".

    String input = "abcde";
    System.out.println(
            input.codePoints()
                    .mapToObj((t) -> "" + t)
                    .collect(joining()));
Piyush Tyagi
quelle