Hogyan alakítsuk át a karaktert karaktersorozattá Java (Példák)
⚡ Okos összefoglaló
Karakter konvertálása karakterlánccá Java egyetlen hívást fogad a String.valueOf(myChar) vagy a Character.toString(myChar) függvényre. Az ellenkező irányba történő mozgás a charAt(index) függvényt használja, amely egy karaktert húz ki a Stringből a pozíciója alapján.

Ebben az oktatóanyagban két rövid programot fogunk tanulmányozni, amelyek egy értéket mozgatnak a két irány között. Java áruházak szövege:
- Karakter konvertálása karakterlánccá
- Karakterlánc átalakítása karakterré
A két típus nem felcserélhető. A char egy primitív objektum, amely pontosan egy 16 bites UTF-16 kódegységet tartalmaz, amelyet aposztrófok között, 'g' alakban írunk. A String egy olyan objektum, amely ezen kódegységek sorozatát tartalmazza, amelyet dupla aposztrófok között, 'g' alakban írunk.Guru99”. Mivel az egyik egy primitív, a másik pedig egy objektum, egyetlen konverzió sem tudja áthidalni őket – egy könyvtármetódusnak kell elvégeznie a munkát, és Java mindkét irányhoz egyet-egyet biztosít.
Char konvertálása karakterláncra
Többféleképpen is lehet karaktert karakterlánccá konvertálni JavaBelsőleg a Java A karakterlánc tárolja a szövegét kódegységek tömbjeként, ezért illeszthető be egyetlen karakter olyan könnyen egy tömbbe. A char egy 16 bites, előjel nélküli adattípus, két bájt széles, 0 és 65 535 közötti értékeket tartalmaz.
Egy karaktert két metódussal konvertálhatunk stringgé — a Character osztály static toString() metódusával, és a String osztály static valueOf() metódusával. Mindkettő egy vadonatúj, egy karakter hosszú stringet ad vissza, és az alábbi két program ugyanazt az eredményt írja ki.
1. módszer: A toString() metódus használata
Az alábbi program a g betűt egy char változó és átadja a Character.toString() függvénynek, amely karakterláncként adja vissza ezt az egyetlen karaktert. A kód szerkeszthető, ezért változtasd meg a betűt és futtasd újra, hogy lásd a kimenetet.
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);
}
}
Várható kimenet:
String is: g
2. módszer: ValueOf() metódus használata
A második program kicseréli a String.valueOf(myChar) változót, és semmi mást nem változtat meg. Mivel Java 9 a két hívás ugyanaz a művelet: a Character.toString(char) függvényt a String.valueOf(char) függvény hívásaként valósítjuk meg, így egyik sem mérhetően gyorsabb a másiknál.
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);
}
}
Várható kimenet:
String is: g
További módszerek karakter karakterlánccá konvertálására
Négy további módszer bukkan fel régebbi kódokban és interjúkérdésekben. Mindegyik működik, de egyik sem olvasható olyan egyértelműen, mint a fenti két módszer, és kettő közülük többet foglal le a kelleténél.
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); } }
Várható teljesítmény:
gggg
A táblázat tartalmazza, hogy mikor érdemes az egyes útvonalakat használni.
| Módszer | Példa | Megjegyzések |
|---|---|---|
| String.valueOf(karakter) | String.valueOf(sajátKarakter) | Ajánlott. Egy hívás, a visszaadott karakterláncon túl nincs további objektum. |
| Karakter.karakterlánccá(karakter) | Karakter.toString(myChar) | Ugyanilyen jó. Elérhető azóta Java 1.4 és a String.valueOf-ba delegál, mivel Java 9. |
| láncolat | myChar + “” | Működik, és tovább Java A 9-es és újabb verziókban invokedynamic hívásra fordul StringBuilder helyett, így a régi figyelmeztetés, hogy lassú, már nem áll fenn. Továbbra is elrejti a szándékot. |
| Karakterburkoló | Karakter.értéke(myChar).toString() | Boxelőször a karaktert használd. Használd a Character.valueOf konstruktort, ne az új Character(char) konstruktort, amely elavulttá vált a 2000 óta tartó eltávolítás miatt. Java 9. |
| karakter tömb | új karakterlánc(új karakter[]{sajátKarakter}) | Lefoglal egy tömböt és lemásolja azt. Fenntartja arra az esetre, ha már van egy karakter tömböd. |
| Karakterlánc.formátum | String.format(„%c”, myChar) | Messze a leglassabb, mivel a formátum karakterláncot futási időben elemzi a rendszer. Csak akkor hasznos, ha a karakter egy nagyobb sablon része. |
Miután az egykarakteres konverzió mindkét irányát lefedtük, a következő lépés a fordított művelet.
Karakterlánc konvertálása karakterré
A String osztály charAt() metódusával karakterré alakíthatunk egy karakterláncot. A metódus egy nulla alapú indexet vesz fel, és visszaadja az adott pozícióban lévő karaktert, tehát minden karakter beolvasása azt jelenti, hogy vécéping 0-tól egészen length() mínusz egyig. 0 alatti vagy length() feletti index bekérése StringIndexOutOfBoundsException kivételt eredményez.
Az alábbi program a húron sétál Guru99 karakterenként, és minden karaktert indexszel együtt nyomtat ki.
//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);
}
}
}
Várható teljesítmény:
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
Megjegyzendő, hogy egy String nem egyszerűen konvertálható: char c = (char) myStr; nem fordul le, mivel a String egy objektum, a char pedig egy primitív. Egy olyan String esetében, amelyről már tudjuk, hogy pontosan egy karaktert tartalmaz, a charAt(0) a teljes válasz.
Karakterlánc átalakítása karaktertömbdé és vissza
Amikor minden karakterre egyszerre van szükség, nem pedig egyenkénti indexre, a toCharArray() visszaadja egy friss karaktertömbA tömb szöveggé alakítása a String(char[]) konstruktor vagy a String.valueOf(char[]) feladata, és mindkettő védekezően másolja a tömböt, így a tömb későbbi szerkesztései nem változtatják meg a karakterláncot.
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)); } }
Várható teljesítmény:
6 G Guru99 Guru99 Guru
Egy negyedik metódus, a getChars(srcBegin, srcEnd, dst, dstBegin) egy tartományt másol egy már meglévő tömbbe egy új lefoglalása helyett. A záró index kizáró, ezért a getChars(0, 4, part, 0) eredménye Guru helyett Guru9. A tartományon kívüli határok IndexOutOfBoundsException kivételt eredményeznek.
A három megközelítés főként abban különbözik, hogy mit allokálnak, az alábbiakban összefoglalva.
| Feladat | Hívás | Mit oszt ki |
|---|---|---|
| Karakterláncból karakter tömb | myStr.toCharArray() | Egy új tömb; biztonságosan használható üres karakterláncon, ahol nulla hosszúságú tömböt ad vissza. |
| karakter tömbből karakterláncba | új String(karakterek) vagy String.valueOf(karakterek) | Egy új karakterlánc plusz a tömb belső másolata. |
| Tartomány egy meglévő tömbben | myStr.getChars(0, 4, rész, 0) | Semmi újdonság; a megadott tömbbe ír. |
Gyakori hibák a char és a String konvertálásakor Java
Az ilyen konverziókkal kapcsolatos problémák nagy része hat visszatérő hibából ered, nem pedig magukból a metódusokból. A táblázat mindegyiket párosítja a javítással.
| Probléma | Okoz | Rögzít |
|---|---|---|
| inkompatibilis típusok: A karakterlánc nem konvertálható karakterré | Egy konvertálási kísérlet, például char c = (char) myStr; | Ehelyett hívd meg a myStr.charAt(0) függvényt. Nincs konverzió az objektum és a primitív között. |
| KarakterláncIndexKivételOutOfBoundsKivétel | A charAt() függvényt negatív indexszel, vagy üres karakterlánc esetén a length() függvényt hívjuk meg. | Olvasás előtt védd az isEmpty() függvénnyel, vagy hasonlítsd össze az indexet a length() függvénnyel. |
| A String.valueOf(null) kivételt dob NullPointerException-re | A bare null megegyezik a char[] túlterheléssel, ami a legspecifikusabb. | Írd ki a String.valueOf((Object) null) függvényt, ha a literál szövege null, amit keresel. |
| A Character.toString(65) függvény A értéket ad vissza, nem 65-öt. | Java A 11-es verzióban hozzáadtunk egy Character.toString(int) túlterhelést, amely az argumentumát Unicode kódpontként olvassa be. | Használd a String.valueOf(65) vagy az Integer.toString(65) függvényt a 65-ös számjegyekhez. |
| Egy emoji két összekevert szimbólumként jelenik meg a kinyomtatás során | Az U+FFFF feletti karakterek két karaktert foglalnak el, egy magas helyettesítőt, majd egy alacsony helyettesítőt. | Olvasd be az értéket a codePointAt(0) függvénnyel, majd építsd újra a Character.toString(codePoint) függvénnyel. Java 11 és később. |
| Elavulási figyelmeztetés az új karakter (myChar) esetén | A Character(char) konstruktor elavult óta Java 9 és eltávolításra jelölve | Használd a Character.valueOf(myChar) függvényt, vagy hagyd, hogy az autoboxing adja meg a wrappert. |
Ugyanaz a String osztály számos szomszédos gyakorlatot támogat: karakterlánc megfordítása rekurzióval, két karakterlánc összehasonlításaés formázott kimenet nyomtatása.
