Hvordan konvertere Char til String i Java (Eksempler)
⚡ Smart oppsummering
Konvertering av et tegn til en streng i Java tar et enkelt kall til String.valueOf(myChar) eller Character.toString(myChar). Bevegelse i motsatt retning bruker charAt(index), som trekker ett tegn ut av en streng etter posisjon.

I denne veiledningen skal vi studere to korte programmer som flytter en verdi mellom de to måtene Java lagrer tekst:
- Konverter et tegn til en streng
- Konverter en streng til et tegn
De to typene er ikke utskiftbare. Et tegn er en primitiv som inneholder nøyaktig én 16-bit UTF-16-kodeenhet, skrevet i enkle anførselstegn som 'g'. En streng er et objekt som inneholder en sekvens av disse kodeenhetene, skrevet i doble anførselstegn som “Guru99”. Fordi den ene er en primitiv og den andre et objekt, kan ingen rollebesetning bygge bro mellom dem – en bibliotekmetode må gjøre jobben, og Java leverer én for hver retning.
Konverter Char til String
Det finnes flere måter å konvertere et tegn til en streng på JavaInternt a Java Streng lagrer teksten sin som en matrise av kodeenheter, og det er derfor et enkelt tegn så lett kan settes inn i en. Et tegn er en 16-bits usignert datatype, to byte bred, som inneholder verdier fra 0 til 65 535.
Vi kan konvertere et tegn til en streng ved hjelp av to metoder – den statiske toString()-metoden på Character-klassen og den statiske valueOf()-metoden på String-klassen. Begge returnerer en helt ny streng som er ett tegn lang, og de to programmene nedenfor skriver ut det samme resultatet.
Metode 1: Bruk av toString()-metoden
Programmet nedenfor lagrer bokstaven g i en char variabel og sender den til Character.toString(), som returnerer det ene tegnet som en streng. Koden er redigerbar, så endre bokstaven og kjør den på nytt for å se resultatet følge.
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);
}
}
Forventet utgang:
String is: g
Metode 2: Bruker metoden valueOf().
Det andre programmet bytter inn String.valueOf(myChar) og endrer ingenting annet. Siden Java 9 er de to kallene den samme operasjonen: Character.toString(char) implementeres som et kall til String.valueOf(char), så ingen av dem er målbart raskere enn den andre.
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);
}
}
Forventet utgang:
String is: g
Andre måter å konvertere et tegn til en streng på
Fire ytterligere ruter dukker opp i eldre kode og i intervjuspørsmål. De fungerer alle, men ingen av dem er like tydelige som de to metodene ovenfor, og to av dem allokerer mer enn de trenger.
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); } }
Forventet utgang:
gggg
Tabellen viser når hver rute er verdt å bruke.
| Metode | Eksempel | Merknader |
|---|---|---|
| String.verdiAv(char) | String.verdiAv(minKar) | Anbefales. Ett kall, ingen ekstra objekter utover den returnerte strengen. |
| Tegn.tilString(char) | Tegn.tilString(minTegn) | Like bra. Tilgjengelig siden Java 1.4 og delegerer til String.valueOf siden Java 9. |
| sammenkjeding | mittChar + «» | Fungerer, og videre Java 9 og senere kompilerer den til et invokedynamic-kall i stedet for en StringBuilder, så den gamle advarselen om at den er treg gjelder ikke lenger. Den skjuler fortsatt intensjonen. |
| Tegninnpakning | Character.valueAv(myChar).toString() | Boxes tegnet først. Bruk Character.valueOf, ikke den nye Character(char)-konstruktøren, som har blitt avskrevet for fjerning siden Java 9. |
| char-array | ny streng(ny char[]{myChar}) | Tildeler en array og kopierer den. Reserverer den for tilfellet der du allerede har en char-array. |
| String.format | String.format("%c", myChar) | Den klart tregeste, fordi formatstrengen analyseres under kjøring. Nyttig bare når tegnet er en del av en større mal. |
Med begge retninger for konverteringen av enkelttegn dekket, er den motsatte operasjonen det neste.
Konverter streng til tegn
Vi kan konvertere en streng til et tegn ved å bruke charAt()-metoden i String-klassen. Metoden tar en nullbasert indeks og returnerer tegnet som står på den posisjonen, så å lese hvert tegn betyr looping fra 0 opp til length() minus én. Hvis man ber om en indeks under 0 eller på length() og over, utløses StringIndexOutOfBoundsException.
Programmet nedenfor går strengen Guru99 én posisjon om gangen og skriver ut hvert tegn med indeksen.
//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);
}
}
}
Forventet utgang:
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 at en streng ikke bare kan castes: char c = (char) myStr; kompilerer ikke, fordi en streng er et objekt og en char er en primitiv. For en streng som allerede er kjent for å inneholde nøyaktig ett tegn, er charAt(0) hele svaret.
Konverter en streng til en char-array og tilbake
Når hvert tegn trengs samtidig i stedet for én indeks om gangen, gir toCharArray() tilbake en ny char-matriseÅ gjøre den arrayen om til tekst igjen er jobben til String(char[])-konstruktøren eller String.valueOf(char[]), og begge kopierer arrayet defensivt, slik at senere redigeringer av arrayet ikke endrer strengen.
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)); } }
Forventet utgang:
6 G Guru99 Guru99 Guru
En fjerde metode, getChars(srcBegin, srcEnd, dst, dstBegin), kopierer et område inn i en array du allerede eier i stedet for å tildele en ny. Sluttindeksen er eksklusiv, og det er derfor getChars(0, 4, part, 0) gir Guru snarere enn Guru9. Utenfor rekkeviddegrenser utløser IndexOutOfBoundsException.
De tre tilnærmingene skiller seg hovedsakelig fra hverandre i hva de tildeler, som oppsummert nedenfor.
| Oppgave | Anrop | Hva den tildeler |
|---|---|---|
| Streng til tegnmatrise | myStr.toCharArray() | En ny array; trygg på en tom streng, der den returnerer en array med lengde null. |
| char-array til streng | ny String(tegn) eller String.verdiAv(tegn) | En ny streng pluss en intern kopi av arrayet. |
| Område i en eksisterende matrise | myStr.getChars(0, 4, part, 0) | Ikke noe nytt; den skriver inn i arrayet du oppgir. |
Vanlige feil ved konvertering av tegn og strenger Java
Mesteparten av problemene med disse konverteringene kommer fra seks gjentakende feil snarere enn fra selve metodene. Tabellen kobler hver enkelt med rettelsen.
| Problem | Årsak | Fix |
|---|---|---|
| inkompatible typer: Strengen kan ikke konverteres til tegn | Et forsøk på å caste, for eksempel char c = (char) myStr; | Kall myStr.charAt(0) i stedet. Det er ingen konvertering mellom et objekt og en primitiv. |
| StringIndexOutOfBoundsException | charAt() kalt med en negativ indeks, eller med length() på en tom streng | Beskytt med isEmpty() eller sammenlign indeksen mot length() før lesing. |
| String.valueOf(null) kaster NullPointerException | Den bare null-verdien samsvarer med char[]-overbelastningen, som er den mest spesifikke | Skriv String.valueOf((Object) null) når den bokstavelige teksten null er det du ønsker. |
| Tegn.tilString(65) returnerer A, ikke 65 | Java 11 la til en Character.toString(int)-overbelastning som leser argumentet som et Unicode-kodepunkt | Bruk String.valueOf(65) eller Integer.toString(65) for sifrene 65. |
| En emoji skrives ut som to forvrengte symboler | Tegn over U+FFFF opptar to tegn, en høy surrogat etterfulgt av en lav surrogat | Les verdien med codePointAt(0), og bygg den deretter opp igjen med Character.toString(codePoint) på Java 11 og senere. |
| Avskrivningsadvarsel for ny karakter (myChar) | Character(char)-konstruktøren har blitt avskrevet siden Java 9 og merket for fjerning | Bruk Character.valueOf(myChar), eller la autoboxing levere wrapperen. |
Den samme strengklassen støtter mange nærliggende øvelser: reversere en streng med rekursjon, sammenligne to strengerog utskrift av formatert utdata.
