Jak przekonwertować kod ASCII (0-255) na odpowiadający mu znak?

135

Jak mogę przekonwertować w Javie kod ASCII (który jest liczbą całkowitą z zakresu [0, 255]) na odpowiadający mu znak ASCII?

Na przykład:

65  -> "A"
102 -> "f"
Belgi
źródło
3
nie jest to duplikat, jak wspomniano powyżej. To nie jest konwersja z liczby całkowitej, ale z char (ascii)
Chathuranga Chandrasekara
11
To nie jest duplikat „Jak przekonwertować z int na String?” ... w każdym razie FWIW, ASCII ma tylko 7-bitowe wartości z wartościami [0, 127] ;-)
1
@phooji Myślę, że ten post mówi o tym, jak przekonwertować 1 -> "1" itp. '
Belgi,
1
@pst - to rozszerzony ASII ;-)
Belgi
3
@Belgi - musisz wyraźnie określić swoje kodowanie, jeśli chcesz poprawnie transkodować wartości 128-255. Termin „rozszerzony ASCII” nie ma znaczenia.
McDowell

Odpowiedzi:

244

Character.toString ((char) i);

Chathuranga Chandrasekara
źródło
W przypadku platform opartych na MIDP 2 / CLDC 1.1 (które ich nie mają Character.toString(char), stackoverflow.com/a/6210938/923560 zapewnia dodatkowe rozwiązania.
Abdull,
Jaki jest powód (char)wyznaczenia? Innymi słowy, dlaczego nie mogę po prostu powiedzieć Character.toString(i);? (Java noob)
Adam Hughes
1
Zauważ, że to nie zadziała dla tego Integertypu, pojawi się błąd „Nie można przesłać java.lang.Integer do java.lang.Character”. Dodaj obsadę do intpierwszej, np .: Character.toString((char)(int)myInteger);
gbmhunter
1
Te iwartości (0-255) będzie od zestawu znaków ISO-8859-1. (Osoba zadająca pytanie odmówiła określenia, który „rozszerzony ASCII” [niejasny termin] był poszukiwany, chyba że zaakceptował tę odpowiedź.)
Tom Blodget,
59

System.out.println((char)65); wypisze „A”

RylandAlmanza
źródło
2
Wskazówka REPL: jeśli używasz JShell (Java 9), możesz pominąć System.out. Po prostu wpisz, (char) 65aby dowiedzieć się, jaki to znak.
DavidS,
2
Pytanie nie dotyczy drukowania, ale konwersji.
iAmLearning
29

String.valueOf(Character.toChars(int))

Zakładając, że liczba całkowita jest, jak mówisz, między 0 a 255, otrzymasz tablicę z pojedynczym znakiem z powrotem z Character.toChars, która stanie się ciągiem jednoznakowym po przekazaniu do String.valueOf.

Korzystanie Character.toCharszaleca się metody z udziałem obsady od intcelu char(tj (char) i) dla wielu powodów, w tym, że Character.toCharsrzuci IllegalArgumentExceptionjeśli nie uda się poprawnie zweryfikować całkowitą natomiast obsada będzie przełknąć błąd (na tym zwężenie specyfikacji prymitywne konwersje ), co potencjalnie daje wyjście inne niż zamierzone.

zjs
źródło
Zakładając, że liczba całkowita mieści się w zakresie od 0 do 255 (jak twierdzisz, że tak jest ... i jak określa pytanie), jest ona niepotrzebna i nieoptymalna w użyciu toChars.
Stephen C
5
Masz całkowitą rację, że coś takiego Character.toString((char) i)jest szybsze niż String.valueOf(Character.toChars(i)). Przeprowadzenie szybkiego testu porównawczego konwersji 1000000 losowych liczb całkowitych w podanym zakresie (100 razy, aby być bezpiecznym) na moim komputerze daje średni czas 153,07 nanosekund w porównaniu z 862,39 nanosekund. Jednak w każdej interesującej aplikacji będą znacznie ważniejsze rzeczy do optymalizacji. Wartość dodana bezpiecznej, deterministycznej obsługi i łatwość rozszerzenia poza zakres [0,255], gdyby była wymagana, przeważa nad niewielkim spadkiem wydajności.
zjs
8
int number = 65;
char c = (char)number;

to jest proste rozwiązanie

atena
źródło
4
    new String(new char[] { 65 })

Otrzymasz ciąg o długości jeden, którego pojedynczy znak ma kod (ASCII) 65. W Javie znaki są numerycznymi typami danych.

Paul Cager
źródło
1

Można iterować od a do z w ten sposób

int asciiForLowerA = 97;
int asciiForLowerZ = 122;
for(int asciiCode = asciiForLowerA; asciiCode <= asciiForLowerZ; asciiCode++){
    search(sCurrentLine, searchKey + Character.toString ((char) asciiCode));
}
Tez Kurmala
źródło
1

Łatwiejszy sposób na zrobienie tego samego:

Wpisz rzutowaną liczbę całkowitą na znak, niech int nbędzie liczbą całkowitą, a następnie:

Char c=(char)n;
System.out.print(c)//char c will store the converted value.
Entriple Aardee
źródło
0
    for (int i = 0; i < 256; i++) {
        System.out.println(i + " -> " + (char) i);
    }

    char lowercase = 'f';
    int offset = (int) 'a' - (int) 'A';
    char uppercase = (char) ((int) lowercase - offset);
    System.out.println("The uppercase letter is " + uppercase);

    String numberString = JOptionPane.showInputDialog(null,
            "Enter an ASCII code:",
            "ASCII conversion", JOptionPane.QUESTION_MESSAGE);

    int code = (int) numberString.charAt(0);
    System.out.println("The character for ASCII code "
            + code + " is " + (char) code);
Kazım Fuat Akdemir
źródło
Wyjaśnij swoją odpowiedź, proszę
want2learn
0

Dlaczego nie uprościć go do metody, która zwraca znak ascii?

public char toAscii (int input) {
    return (char)input;
}
Sapphire_Brick
źródło
-1

To jest przykład, który pokazuje, że konwertując int na char, można określić odpowiedni znak w kodzie ASCII.

public class sample6
{
    public static void main(String... asf)
    {

        for(int i =0; i<256; i++)
        {
            System.out.println( i + ". " + (char)i);
        }
    }
}
Prakash Hadgal
źródło
-1

górna odpowiedź tylko przy rozwiązaniu problemu. oto twoja odpowiedź:

Integer.decode (Character.toString (char c));

Maksymilian Notar
źródło