Hoe Char naar String te converteren Java (Voorbeelden)
โก Slimme samenvatting
Een teken omzetten naar een tekenreeks in Java Dit vereist รฉรฉn enkele aanroep van String.valueOf(myChar) of Character.toString(myChar). In de omgekeerde richting gebruikt men charAt(index), waarmee รฉรฉn teken uit een String wordt gehaald op basis van de positie ervan.
In deze tutorial bestuderen we twee korte programma's die een waarde tussen twee manieren verplaatsen. Java winkeltekst:
- Converteer een teken naar een tekenreeks.
- Converteer een tekenreeks naar een teken.
De twee typen zijn niet uitwisselbaar. Een char is een primitief type dat precies รฉรฉn 16-bits UTF-16-code-eenheid bevat, tussen enkele aanhalingstekens geschreven als 'g'. Een string is een object dat een reeks van die code-eenheden bevat, tussen dubbele aanhalingstekens geschreven als "".Guru99โ. Omdat de ene een primitief type is en de andere een object, kan geen typeconversie ze overbruggen โ een bibliotheekmethode moet het werk doen, en Java levert er รฉรฉn voor elke richting.
Converteer teken naar tekenreeks
Er zijn meerdere manieren om een โโteken naar een tekenreeks te converteren. JavaIntern a Java String slaat zijn tekst op. Een char is een 16-bits, niet-ondertekend gegevenstype, twee bytes breed, dat waarden van 0 tot 65,535 kan bevatten.
We kunnen een char naar een string converteren met behulp van twee methoden: de statische toString()-methode van de Character-klasse en de statische valueOf()-methode van de String-klasse. Beide methoden retourneren een gloednieuwe string van รฉรฉn teken lang, en de twee onderstaande programma's printen hetzelfde resultaat.
Methode 1: De toString()-methode gebruiken
Het onderstaande programma slaat de letter g op in een char variabele en geeft het door aan Character.toString(), die dat ene teken als een String retourneert. De code is bewerkbaar, dus verander de letter en voer het opnieuw uit om de uitvoer te zien.
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);
}
}
Verwachte resultaten :
String is: g
Methode 2: Methode valueOf() gebruiken
Het tweede programma vervangt String.valueOf(myChar) door String.valueOf(myChar) en verandert verder niets. Java 9. Beide aanroepen betreffen dezelfde bewerking: Character.toString(char) is geรฏmplementeerd als een aanroep naar String.valueOf(char), dus geen van beide is meetbaar sneller dan de andere.
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);
}
}
Verwachte resultaten :
String is: g
Andere manieren om een โโteken naar een tekenreeks te converteren
In oudere code en in interviewvragen duiken nog vier andere routes op. Ze werken allemaal, maar geen ervan is zo duidelijk leesbaar als de twee bovenstaande methoden, en twee ervan wijzen meer geheugen toe dan nodig is.
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); } }
Verwachte resultaten:
gggg
De tabel geeft aan wanneer elke route de moeite waard is om te gebruiken.
| Methode | Voorbeeld | Notes |
|---|---|---|
| String.valueOf(char) | String.valueOf(myChar) | Aanbevolen. Eรฉn aanroep, geen extra object naast de geretourneerde String. |
| Karakter.toString(char) | Character.toString(myChar) | Eveneens goed. Beschikbaar sinds Java 1.4 en delegeert naar String.valueOf sinds Java 9. |
| Aaneenschakeling | myChar + โโ | Werkt, en op Java Vanaf versie 9 compileert het naar een invokedynamic-aanroep in plaats van een StringBuilder, waardoor de oude waarschuwing dat het traag is niet langer opgaat. Het verbergt echter nog steeds de bedoeling. |
| Tekenomhulsel | Character.valueOf(myChar).toString() | BoxGebruik eerst het teken. Gebruik `Character.valueOf`, niet de nieuwe `Character(char)`-constructor, die sinds die tijd is afgekeurd en verwijderd. Java 9. |
| tekenreeks | nieuwe String(nieuwe char[]{myChar}) | Hiermee wordt een array toegewezen en gekopieerd. Reserveer deze functie voor het geval je al een char-array hebt. |
| String.format | String.format(โ%cโ, myChar) | Verreweg de traagste methode, omdat de opmaakstring tijdens de uitvoering wordt geparseerd. Alleen bruikbaar wanneer het teken onderdeel is van een grotere sjabloon. |
Nu beide richtingen van de conversie van รฉรฉn teken zijn behandeld, is de omgekeerde bewerking aan de beurt.
Converteer tekenreeks naar teken
We kunnen een String naar een char converteren met behulp van de `charAt()`-methode van de `String`-klasse. De methode neemt een index (beginnend bij nul) en retourneert de char op die positie, dus het lezen van elk teken betekent... looping Van 0 tot en met length() min รฉรฉn. Het opvragen van een index lager dan 0 of gelijk aan of hoger dan length() resulteert in een StringIndexOutOfBoundsException.
Het onderstaande programma doorloopt de tekenreeks. GuruHet programma verwerkt positie voor positie 99 en print elk teken met de bijbehorende index.
//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);
}
}
}
Verwachte resultaten:
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
Merk op dat een String niet zomaar gecast kan worden: `char c = (char) myStr;` compileert niet, omdat een String een object is en een char een primitief gegevenstype. Voor een String waarvan al bekend is dat deze precies รฉรฉn teken bevat, is `charAt(0)` het volledige antwoord.
Een tekenreeks omzetten naar een tekenreeksarray en weer terug.
Wanneer elk teken tegelijk nodig is in plaats van index voor index, geeft toCharArray() het volgende terug een nieuwe tekenreeksHet omzetten van die array terug naar tekst is de taak van de String(char[])-constructor of String.valueOf(char[]), en beide kopiรซren de array op een beschermende manier, zodat latere bewerkingen aan de array de String niet wijzigen.
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)); } }
Verwachte resultaten:
6 G Guru99 Guru99 Guru
Een vierde methode, getChars(srcBegin, srcEnd, dst, dstBegin), kopieert een bereik naar een array die je al hebt, in plaats van een nieuwe array aan te maken. De eindindex is exclusief, vandaar dat getChars(0, 4, part, 0) het volgende resultaat oplevert: Guru dan Guru9. Bij overschrijding van de grenzen wordt een IndexOutOfBoundsException gegenereerd.
De drie benaderingen verschillen voornamelijk in wat ze toewijzen, zoals hieronder samengevat.
| Taak | Bel | Wat het toewijst |
|---|---|---|
| String naar tekenreeks | myStr.toCharArray() | Een nieuwe array; veilig bij een lege string, waarbij een array met lengte nul wordt geretourneerd. |
| tekenreeks naar tekenreeks | nieuwe String(chars) of String.valueOf(chars) | Een nieuwe String plus een interne kopie van de array. |
| Bereik binnen een bestaande array | myStr.getChars(0, 4, part, 0) | Niets nieuws; het schrijft naar de array die je opgeeft. |
Veelvoorkomende fouten bij het converteren van char en String in Java
De meeste problemen bij deze conversies komen voort uit zes terugkerende fouten, en niet zozeer uit de methoden zelf. De tabel koppelt elke fout aan de bijbehorende oplossing.
| probleem | Veroorzaken | Bepalen |
|---|---|---|
| Incompatibele gegevenstypen: String kan niet worden geconverteerd naar char. | Een poging tot casten, zoals char c = (char) myStr; | Roep in plaats daarvan myStr.charAt(0) aan. Er is geen typeconversie tussen een object en een primitief gegevenstype. |
| StringIndexOutOfBoundsException | charAt() aangeroepen met een negatieve index, of met length() op een lege string | Beveilig met isEmpty() of vergelijk de index met length() voordat je gaat lezen. |
| String.valueOf(null) gooit NullPointerException | De kale null komt overeen met de char[]-overload, wat de meest specifieke is. | Schrijf String.valueOf((Object) null) als je de letterlijke tekst 'null' wilt. |
| Character.toString(65) retourneert A, niet 65 | Java Versie 11 voegde een Character.toString(int)-overload toe die het argument leest als een Unicode-codepunt. | Gebruik String.valueOf(65) of Integer.toString(65) voor de cijfers 65. |
| Een emoji wordt afgedrukt als twee vervormde symbolen. | Karakters boven U+FFFF beslaan twee karakters, een hoog surrogaat gevolgd door een laag surrogaat. | Lees de waarde met codePointAt(0) en herbouw deze vervolgens met Character.toString(codePoint). Java 11 en later. |
| Waarschuwing voor verouderde code bij nieuw personage (myChar) | De Character(char)-constructor is sinds die tijd verouderd. Java 9 en gemarkeerd voor verwijdering | Gebruik Character.valueOf(myChar), of laat autoboxing de wrapper leveren. |
Dezelfde String-klasse biedt ondersteuning voor tal van verwante oefeningen: Een tekenreeks omkeren met behulp van recursie, twee snaren vergelijkenen afdrukken van geformatteerde uitvoer.
