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"
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"
Odpowiedzi:
Character.toString(char)
, stackoverflow.com/a/6210938/923560 zapewnia dodatkowe rozwiązania.
(char)
wyznaczenia? Innymi słowy, dlaczego nie mogę po prostu powiedzieć Character.toString(i);
? (Java noob)
Integer
typu, pojawi się błąd „Nie można przesłać java.lang.Integer do java.lang.Character”. Dodaj obsadę do int
pierwszej, np .: Character.toString((char)(int)myInteger);
i
wartoś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ź.)
System.out.println((char)65);
wypisze „A”
(char) 65
aby dowiedzieć się, jaki to znak.
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.toChars
zaleca się metody z udziałem obsady od int
celu char
(tj (char) i
) dla wielu powodów, w tym, że Character.toChars
rzuci IllegalArgumentException
jeś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.
toChars
.
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.
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.
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));
}
Łatwiejszy sposób na zrobienie tego samego:
Wpisz rzutowaną liczbę całkowitą na znak, niech int n
będzie liczbą całkowitą, a następnie:
Char c=(char)n;
System.out.print(c)//char c will store the converted value.
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);
Dlaczego nie uprościć go do metody, która zwraca znak ascii?
public char toAscii (int input) {
return (char)input;
}
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);
}
}
}
górna odpowiedź tylko przy rozwiązaniu problemu. oto twoja odpowiedź:
Integer.decode (Character.toString (char c));