JW String charkiedykolwiek się skompiluje. Być może zechcesz zmienić nazwę zmiennej naString ch
Vikas Prasad
ASCII? Czy na pewno tego chcesz? Java używa kodowania znaków UTF-16 zestawu znaków Unicode (podobnie jak JavaScript, .NET, VBA, VB4 / 5/6, NCHAR, NVARCHAR, NTFS, Windows API,…). Odpowiedzi dzielą się na kilka kategorii: udzielanie odpowiedzi bezpośrednio na temat ASCII, odpowiadanie na temat UTF-16 i odpowiadanie na temat ASCII za pomocą kilku skrótów z UTF-16 (a także niektóre są po prostu błędne).
Tom Blodget
Odpowiedzi:
296
Bardzo prosty. Po prostu rzuć charjako int.
char character ='a';int ascii =(int) character;
W twoim przypadku musisz najpierw pobrać konkretną postać ze sznurka, a następnie ją rzucić.
char character = name.charAt(0);// This gives the character 'a'int ascii =(int) character;// ascii is now 97.
Chociaż rzutowanie nie jest wymagane jawnie, ale poprawia czytelność.
int ascii = character;// Even this will do the trick.
Wystarczy pamiętać, że „char” to zarezerwowane słowo w Javie.
Zimno
12
Kilka odpowiedzi, które rzekomo pokazują, jak to zrobić, jest błędnych, ponieważ znaki Java nie są znakami ASCII. Java wykorzystuje wielobajtowe kodowanie znaków Unicode. Zestaw znaków Unicode to super zestaw znaków ASCII. Zatem w ciągu Java mogą znajdować się znaki, które nie należą do ASCII. Takie znaki nie mają wartości liczbowej ASCII, więc nie można odpowiedzieć na pytanie, jak uzyskać wartość liczbową ASCII znaku Java.
Ale dlaczego tak czy owak chcesz to zrobić? Co zamierzasz zrobić z wartością?
Jeśli chcesz mieć wartość liczbową, aby móc przekonwertować ciąg Java na ciąg ASCII, prawdziwe pytanie brzmi: „jak zakodować ciąg Java jako ASCII”. W tym celu użyj obiektu StandardCharsets.US_ASCII.
Doskonała odpowiedź. Rzutowanie czcionek to tylko skrót, który nie jest dokładny. Cieszę się, że twoja odpowiedź pojawiła się na początku, aby ludzie nie zrozumieli źle koncepcji.
Karthik R
Powodem, dla którego muszę znać ciąg znaków ASCII, jest to, że otrzymałem dane Unicode wchodzące do procesu zaplecza, który musi umieścić czysty ASCII w innym miejscu i muszę to zrobić, gdy otrzymuję kod inny niż Unicode. Zwykle, gdy użytkownicy kopiują wklejanie z MS Word (np. Zakrzywione podwójne i pojedyncze cudzysłowy, długie myślniki itp.). Wspominanie o StandardCharsets.US_ASCII jest właściwą rzeczą do zrobienia, ale to nie mówi pierwotnemu pytającemu, jak go używać.
Tihamer
public static String displayAsciiCode (String s, boolean useStandard) {String r = ""; byte [] ascii = null; if (useStandard) {ascii = s.getBytes (StandardCharsets.US_ASCII); for (int i = 0; i <ascii.length; i ++) {byte b = ascii [i]; r = r + "" + s.charAt (i) + "=" + (int) b; }} else {ascii = s.getBytes (); for (int i = 0; i <ascii.length; i ++) {byte b = ascii [i]; r = r + "" + Character.toString ((char) ascii [i]) + "=" + (int) b; }} return r; }
Tihamer
Wywołaj powyższe z: String string = "To jest" dziwne "; System.out.println ("strings =" + string); System.out.println (displayAsciiCode (string, true)); System.out.println (displayAsciiCode (string, false)); Wynik to: stringi = To „jest” dziwne 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
Jeśli chcesz przekonwertować cały ciąg na połączone wartości ASCII, możesz użyć tego -
String str ="abc";// or anything elseStringBuilder sb =newStringBuilder();for(char c : str.toCharArray())
sb.append((int)c);BigInteger mInt =newBigInteger(sb.toString());System.out.println(mInt);
Chociaż ten fragment kodu może rozwiązać problem, dołączenie wyjaśnienia naprawdę pomaga poprawić jakość Twojego posta. Pamiętaj, że odpowiadasz na pytanie do czytelników w przyszłości, a osoby te mogą nie znać powodów, dla których zaproponowałeś kod.
DimaSan,
1
To proste, pobierz żądaną postać i przekonwertuj ją na int.
Wiem, że odpowiedź na to pytanie została już udzielona w kilku formach, ale oto mój fragment kodu, który ma przejrzeć wszystkie znaki.
Oto kod, rozpoczęty od klasy
publicclassCheckChValue{// Class namepublicstaticvoid main(String[] args){// class mainString name ="admin";// String to check it's valueint nameLenght = name.length();// length of the string used for the loopfor(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 characterint ascii =(int) character;//convert the first characterSystem.out.println(character+" = "+ ascii);// print the character and it's value in ascii}}
Java używa Unicode dla stringi char. Jednostką tekstową w Unicode jest grafem, który jest podstawowym punktem kodowym, po którym następuje zero lub więcej łączących punktów kodowych. Punkt kodowy w Javie jest kodowany w UTF-16, co może wymagać jednej lub dwóch 16-bitowych jednostek kodu ( char) dla punktu kodowego. Aby dokonać iteracji punktów kodowych, zobacz tę odpowiedź . Kod powinien być już gotowy na przykład dla nadchodzącej RĘKI U + 1F91E Z INDEKSEM I SKRZYŻOWANYMI ŚRODKOWYMI PALCAMI.
Tom Blodget,
1
String str ="abc";// or anything else// Stores strings of integer representations in sequenceStringBuilder sb =newStringBuilder();for(char c : str.toCharArray())
sb.append((int)c);// store ascii integer string array in large integerBigInteger mInt =newBigInteger(sb.toString());System.out.println(mInt);
Chociaż ten kod może odpowiedzieć na pytanie, lepiej jest wyjaśnić, co robi i dodać do niego odniesienia.
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}
new String(byte[])stosuje jeszcze inne kodowanie znaków - tak zwane domyślne systemowe, które różnią się w zależności od czasu, maszyn i użytkowników; prawie nigdy nie przydatne. To, co nazywasz, asciiStringto nadal UTF-16, ponieważ to wszystko, co ma Java.
Tom Blodget,
@TomBlodget, zgadzam się. Ale myślę, że OP chciał wiedzieć, jak uzyskać reprezentację ASCII danej postaci. To tylko kodowanie, ponieważ java nie może wykonać surowego ASCII
Próbowałem tego samego, ale najlepszym i łatwym rozwiązaniem byłoby użycie charAt i aby uzyskać dostęp do indeksów, powinniśmy utworzyć tablicę liczb całkowitych o rozmiarze [128].
String name ="admin";int ascii = name.charAt(0);int[] letters =newint[128];//this will allocate space with 128byte size.
letters[ascii]++;//increments the value of 97 to 1;System.out.println("Output:"+ ascii);//Outputs 97System.out.println("Output:"+ letters[ascii]);//Outputs 1 if you debug you'll see 97th index value will be 1.
W przypadku, gdy chcesz wyświetlić wartości ascii pełnego ciągu, musisz to zrobić.
String name ="admin";char[] val = name.toCharArray();for(char b: val){int c = b;System.out.println("Ascii value of "+ b +" is: "+ c);}
Twój wynik w tym przypadku będzie wyglądał następująco: Ascii wartość a wynosi: 97 Ascii wartość d wynosi: 100 Ascii wartość m wynosi: 109 Ascii wartość i wynosi: 105 Ascii wartość n wynosi: 110
publicclassConvertToAscii{publicstaticvoid main(String args[]){String abc ="admin";int[]arr =newint[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 asciiSystem.out.print(" "+arr[i]);}}}
Wynik to:
THe asscii value of each character is:
97 100 109 105 110
Tutaj abc.charAt(i)daje pojedynczy znak tablicy String: Kiedy przypisujemy każdy znak do typu całkowitego, kompilator wykonuje konwersję typów jako,
arr[i] = (int) character // Here, every individual character is coverted in ascii value
Ale dla pojedynczego znaku:
String name = admin;
asciiValue = (int) name.charAt(0);// for character 'a'
System.out.println(asciiValue);
Chciałbym dać jeszcze jedną sugestię, aby przekonwertować cały ciąg znaków na odpowiadające mu kody ascii, używając na przykład języka java 8, „abcde” na „979899100101”.
String char
kiedykolwiek się skompiluje. Być może zechcesz zmienić nazwę zmiennej naString ch
Odpowiedzi:
Bardzo prosty. Po prostu rzuć
char
jakoint
.W twoim przypadku musisz najpierw pobrać konkretną postać ze sznurka, a następnie ją rzucić.
Chociaż rzutowanie nie jest wymagane jawnie, ale poprawia czytelność.
źródło
int ascii = (int)name.charAt(0);
po prostu inne podejście
bytes[0]
będzie reprezentować ascii a .., a tym samym inne znaki w całej tablicy.źródło
Zamiast tego:
Powinieneś użyć
charAt()
metody.źródło
Kilka odpowiedzi, które rzekomo pokazują, jak to zrobić, jest błędnych, ponieważ znaki Java nie są znakami ASCII. Java wykorzystuje wielobajtowe kodowanie znaków Unicode. Zestaw znaków Unicode to super zestaw znaków ASCII. Zatem w ciągu Java mogą znajdować się znaki, które nie należą do ASCII. Takie znaki nie mają wartości liczbowej ASCII, więc nie można odpowiedzieć na pytanie, jak uzyskać wartość liczbową ASCII znaku Java.
Ale dlaczego tak czy owak chcesz to zrobić? Co zamierzasz zrobić z wartością?
Jeśli chcesz mieć wartość liczbową, aby móc przekonwertować ciąg Java na ciąg ASCII, prawdziwe pytanie brzmi: „jak zakodować ciąg Java jako ASCII”. W tym celu użyj obiektu
StandardCharsets.US_ASCII
.źródło
Jeśli chcesz przekonwertować cały ciąg na połączone wartości ASCII, możesz użyć tego -
gdzie otrzymasz wynik 979899.
Kredyt na to .
Po prostu skopiowałem to tutaj, aby było wygodne dla innych.
źródło
Przekonwertuj znak na int.
Również :
źródło
Po prostu rzuć char na int.
Wartość
number
wyniesie 97.źródło
źródło
To proste, pobierz żądaną postać i przekonwertuj ją na int.
źródło
Wiem, że odpowiedź na to pytanie została już udzielona w kilku formach, ale oto mój fragment kodu, który ma przejrzeć wszystkie znaki.
Oto kod, rozpoczęty od klasy
}
źródło
string
ichar
. Jednostką tekstową w Unicode jest grafem, który jest podstawowym punktem kodowym, po którym następuje zero lub więcej łączących punktów kodowych. Punkt kodowy w Javie jest kodowany w UTF-16, co może wymagać jednej lub dwóch 16-bitowych jednostek kodu (char
) dla punktu kodowego. Aby dokonać iteracji punktów kodowych, zobacz tę odpowiedź . Kod powinien być już gotowy na przykład dla nadchodzącej RĘKI U + 1F91E Z INDEKSEM I SKRZYŻOWANYMI ŚRODKOWYMI PALCAMI.źródło
źródło
Jak zauważył @Raedwald, Java Unicode nie obsługuje wszystkich znaków, aby uzyskać wartość ASCII. Prawidłowy sposób (Java 1.7+) jest następujący:
źródło
new String(byte[])
stosuje jeszcze inne kodowanie znaków - tak zwane domyślne systemowe, które różnią się w zależności od czasu, maszyn i użytkowników; prawie nigdy nie przydatne. To, co nazywasz,asciiString
to nadal UTF-16, ponieważ to wszystko, co ma Java.Prostym sposobem na to jest:
Jeśli wydrukujesz „znak”, otrzymasz 97.
źródło
Lub możesz użyć Stream API dla 1 znaku lub ciągu zaczynającego się od Java 1.8:
źródło
przy użyciu Java 9 => String.chars ()
produkcja - [115, 116, 97, 99, 107, 111, 118, 101, 114, 102, 108, 111, 119]
źródło
Za pomocą tego kodu możesz sprawdzić numer ASCII.
Jeśli się mylę, przepraszam.
źródło
Jeśli chcesz uzyskać wartość ASCII wszystkich znaków w łańcuchu. Możesz użyć tego:
a jeśli chcesz ASCII pojedynczego znaku w łańcuchu, możesz wybrać:
źródło
Próbowałem tego samego, ale najlepszym i łatwym rozwiązaniem byłoby użycie charAt i aby uzyskać dostęp do indeksów, powinniśmy utworzyć tablicę liczb całkowitych o rozmiarze [128].
W przypadku, gdy chcesz wyświetlić wartości ascii pełnego ciągu, musisz to zrobić.
Twój wynik w tym przypadku będzie wyglądał następująco: Ascii wartość a wynosi: 97 Ascii wartość d wynosi: 100 Ascii wartość m wynosi: 109 Ascii wartość i wynosi: 105 Ascii wartość n wynosi: 110
źródło
Najłatwiej to zrobić:
Dla całego łańcucha do ASCII:
Wynik to:
THe asscii value of each character is: 97 100 109 105 110
Tutaj
abc.charAt(i)
daje pojedynczy znak tablicy String: Kiedy przypisujemy każdy znak do typu całkowitego, kompilator wykonuje konwersję typów jako,arr[i] = (int) character // Here, every individual character is coverted in ascii value
Ale dla pojedynczego znaku:
String name = admin; asciiValue = (int) name.charAt(0);// for character 'a' System.out.println(asciiValue);
źródło
Do tego moglibyśmy od razu użyć klas String
Chciałbym dać jeszcze jedną sugestię, aby przekonwertować cały ciąg znaków na odpowiadające mu kody ascii, używając na przykład języka java 8, „abcde” na „979899100101”.
źródło