Kako pretvoriti Char u String u Java (Primjeri)
โก Pametni saลพetak
Pretvaranje znaka u niz znakova u Java potreban je jedan poziv funkcije String.valueOf(myChar) ili Character.toString(myChar). Kretanje u obrnutom smjeru koristi charAt(index), koja izvlaฤi jedan znak iz niza znakova prema njegovoj poziciji.
U ovom tutorijalu prouฤit ฤemo dva kratka programa koji pomiฤu vrijednost izmeฤu ta dva naฤina Java pohranjuje tekst:
- Pretvori znak u niz znakova
- Pretvori niz znakova u znak
Dva tipa nisu zamjenjiva. Char je primitiv koji sadrลพi toฤno jednu 16-bitnu UTF-16 kodnu jedinicu, napisanu u jednostrukim navodnicima kao 'g'. String je objekt koji sadrลพi niz tih kodnih jedinica, napisan u dvostrukim navodnicima kao โGuru99โ. Buduฤi da je jedan primitiv, a drugi objekt, nijedno pretvaranje ih ne moลพe premostiti - knjiลพniฤna metoda mora obaviti posao i Java nudi po jedan za svaki smjer.
Pretvori znak u niz
Postoji viลกe naฤina za pretvaranje char u String u JavaInterno a Java String pohranjuje svoj tekst kao niz kodnih jedinica, zbog ฤega se jedan znak tako lako uklapa u jedan. Znak je 16-bitni neoznaฤeni tip podataka, ลกirine dva bajta, koji sadrลพi vrijednosti od 0 do 65,535.
Moลพemo pretvoriti char u String pomoฤu dvije metode - statiฤke metode toString() na klasi Character i statiฤke metode valueOf() na klasi String. Obje vraฤaju potpuno novi String duljine jednog znaka, a dva programa u nastavku ispisuju isti rezultat.
Metoda 1: Koriลกtenje metode toString().
Program u nastavku pohranjuje slovo g u char varijabla i prosljeฤuje ga funkciji Character.toString(), koja vraฤa taj jedan znak kao niz znakova. Kod se moลพe ureฤivati, stoga promijenite slovo i ponovno ga pokrenite da biste pratili ispis.
public class CharToString_toString {
public static void main(String[] args) {
//input character variable
char myChar = 'g';
//Using toString() method
//toString method take character parameter and convert string.
String myStr = Character.toString(myChar);
//print string value
System.out.println("String is: " + myStr);
}
}
Oฤekivani rezultat:
String is: g
Metoda 2: Koriลกtenje metode valueOf().
Drugi program zamjenjuje String.valueOf(myChar) i ne mijenja niลกta drugo. Buduฤi da Java 9 dva poziva su ista operacija: Character.toString(char) je implementiran kao poziv String.valueOf(char), tako da nijedan nije mjerljivo brลพi od drugog.
public class CharToString_valueOf {
public static void main(String[] args) {
char myChar = 'g';
//valueOf method take character parameter and convert string.
String myStr = String.valueOf(myChar);
////print string value
System.out.println("String is: " + myStr);
}
}
Oฤekivani rezultat:
String is: g
Drugi naฤini pretvaranja znaka u niz znakova
Joลก ฤetiri rute pojavljuju se u starijem kodu i u pitanjima na intervjuima. Sve rade, ali nijedna se ne ฤita tako jasno kao dvije gore navedene metode, a dvije od njih dodjeljuju viลกe nego ลกto je potrebno.
public class CharToStringMore { public static void main(String[] args) { char myChar = 'g'; // 1. concatenation with an empty literal String byConcat = myChar + ""; // 2. the Character wrapper instance method String byWrapper = Character.valueOf(myChar).toString(); // 3. a one-element array of code units String byArray = new String(new char[]{myChar}); // 4. the format() helper with the %c conversion String byFormat = String.format("%c", myChar); System.out.println(byConcat + byWrapper + byArray + byFormat); } }
Oฤekivani rezultat:
gggg
Tablica navodi kada se koja ruta isplati koristiti.
| naฤin | Primjer | Biljeลกke |
|---|---|---|
| String.valueOf(char) | String.valueOf(myChar) | Preporuฤeno. Jedan poziv, bez dodatnog objekta izvan vraฤenog niza. |
| Znak.uString(znak) | Znak.uString(mojZnak) | Jednako dobro. Dostupno od Java 1.4 i delegata na String.valueOf od Java 9. |
| povezan u lanac | mojZnak + "" | Radi i dalje Java U verzijama 9 i novijim kompajlira se u poziv invokedynamic umjesto u StringBuilder, tako da staro upozorenje da je sporo viลกe ne vrijedi. I dalje skriva namjeru. |
| Omotaฤ znakova | Znak.vrijednost(mojZnak).uString() | BoxPrvo se koristi char. Koristite Character.valueOf, a ne novi konstruktor Character(char), ฤije je uklanjanje zastarjelo od Java 9. |
| niz znakova | novi niz znakova(novi znak[]{mojZnak}) | Dodjeljuje niz i kopira ga. Rezervira ga za sluฤaj kada veฤ imate niz znakova. |
| String.format | String.format("%c", mojZnak) | Daleko najsporiji, jer se niz formata analizira tijekom izvoฤenja. Korisno samo kada je znak dio veฤeg predloลกka. |
Nakon ลกto smo pokrili oba smjera pretvorbe jednog znaka, slijedi obrnuta operacija.
Pretvori niz u char
String moลพemo pretvoriti u char pomoฤu metode charAt() klase String. Metoda uzima indeks koji se temelji na nuli i vraฤa char koji se nalazi na toj poziciji, tako da ฤitanje svakog znaka znaฤi WCping od 0 do length() minus jedan. Zahtjev za indeks ispod 0 ili na length() i iznad izbacuje StringIndexOutOfBoundsException.
Program u nastavku obilazi niz znakova Guru99 jednu poziciju odjednom i ispisuje svaki znak s njegovim indeksom.
//Convert String to Character using string method
package com.guru99;
public class StringToChar {
public static void main(String[] args)
{
//input String
String myStr = "Guru99";
//find string length using length method.
int stringLength =myStr.length();
//for loop start 0 to total length
for(int i=0; i < stringLength;i++)
{
//chatAt method find Position and convert to character.
char myChar = myStr.charAt(i);
//print string to character
System.out.println("Character at "+i+" Position: "+myChar);
}
}
}
Oฤekivani rezultat:
Character at 0 Position: G Character at 1 Position: u Character at 2 Position: r Character at 3 Position: u Character at 4 Position: 9 Character at 5 Position: 9
Imajte na umu da se niz znakova (String) ne moลพe jednostavno pretvoriti: char c = (char) myStr; se ne kompajlira, jer je String objekt, a char je primitiv. Za String za koji se veฤ zna da sadrลพi toฤno jedan znak, charAt(0) je cijeli odgovor.
Pretvori string u niz znakova i natrag
Kada je svaki znak potreban odjednom, a ne jedan indeks odjednom, toCharArray() vraฤa vrijednost natrag novi niz znakovaPretvaranje tog niza natrag u tekst je zadatak konstruktora String(char[]) ili String.valueOf(char[]), a oba kopiraju niz obrambeno, tako da kasnije izmjene niza ne mijenjaju String.
public class StringCharArray { public static void main(String[] args) { String myStr = "Guru99"; // the text split into its array of code units char[] chars = myStr.toCharArray(); System.out.println(chars.length); System.out.println(chars[0]); // the array turned back into text System.out.println(new String(chars)); System.out.println(String.valueOf(chars)); // one range copied into an array you already own char[] part = new char[4]; myStr.getChars(0, 4, part, 0); System.out.println(new String(part)); } }
Oฤekivani rezultat:
6 G Guru99 Guru99 Guru
ฤetvrta metoda, getChars(srcBegin, srcEnd, dst, dstBegin), kopira raspon u polje koje veฤ posjedujete umjesto da dodijelite novo. Zavrลกni indeks je iskljuฤiv, zbog ฤega getChars(0, 4, part, 0) vraฤa Guru viลกe nego Guru9. Izvan raspona granica baca iznimku IndexOutOfBoundsException.
Tri pristupa se razlikuju uglavnom po onome ลกto dodjeljuju, kao ลกto je saลพeto u nastavku.
| Zadatak | poziv | ล to dodjeljuje |
|---|---|---|
| Niz znakova u niz znakova | myStr.toCharArray() | Novi niz; siguran na praznom nizu, gdje vraฤa niz nulte duljine. |
| niz znakova u niz znakova | novi String(znakovi) ili String.vrijednost(znakovi) | Novi niz znakova plus interna kopija niza. |
| Raspon u postojeฤi niz | myStr.getChars(0, 4, dio, 0) | Niลกta novo; zapisuje u niz koji ste naveli. |
Uobiฤajene pogreลกke prilikom pretvaranja char i String u Java
Veฤina problema u ovim konverzijama dolazi od ลกest ponavljajuฤih pogreลกaka, a ne od samih metoda. Tablica svaku od njih uparuje s rjeลกenjem.
| Problem | Izazvati | Popraviti |
|---|---|---|
| nekompatibilni tipovi: String se ne moลพe pretvoriti u char | Pokuลกaj pretvaranja, kao ลกto je char c = (char) myStr; | Umjesto toga pozovite myStr.charAt(0). Nema pretvaranja izmeฤu objekta i primitive. |
| Iznimka StringIndexOutOfBounds | charAt() pozvan s negativnim indeksom ili s length() na praznom nizu znakova | Zaลกtitite se s isEmpty() ili usporedite indeks s length() prije ฤitanja. |
| String.valueOf(null) baca NullPointerException | Goli null odgovara preoptereฤenju char[], ลกto je najspecifiฤnije | Napiลกite String.valueOf((Object) null) kada ลพelite doslovni tekst null. |
| Character.toString(65) vraฤa A, a ne 65 | Java 11 dodano je preoptereฤenje Character.toString(int) koje ฤita svoj argument kao Unicode kodnu toฤku | Za znamenke 65 koristite String.valueOf(65) ili Integer.toString(65). |
| Emoji se ispisuje kao dva iskrivljena simbola | Znakovi iznad U+FFFF zauzimaju dva znaka, visoki surogat nakon kojeg slijedi niski surogat. | Proฤitajte vrijednost pomoฤu codePointAt(0), a zatim je ponovno izgradite pomoฤu Character.toString(codePoint) Java 11. i kasnije. |
| Upozorenje o zastarivanju za novi znak (myChar) | Konstruktor Character(char) je zastario od Java 9 i oznaฤeno za uklanjanje | Koristite Character.valueOf(myChar) ili neka autoboxing osigura omotaฤ. |
Ista klasa String podrลพava mnoลกtvo susjednih vjeลพbi: obrnuto kretanje niza pomoฤu rekurzije, usporeฤivanje dva niza znakovai ispis formatiranog izlaza.
