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"

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

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”


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.


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


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.


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

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.

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

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

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

-1

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

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.