Kuidas teisendada tähemärki stringiks Java (Näited)
⚡ Nutikas kokkuvõte
Tähemärgi teisendamine stringiks Java võtab ühe kutse funktsioonile String.valueOf(myChar) või Character.toString(myChar). Vastupidises suunas liikumiseks kasutatakse funktsiooni charAt(index), mis tõmbab stringist ühe märgi selle positsiooni järgi.

Selles õpetuses uurime kahte lühikest programmi, mis liigutavad väärtust kahe suuna vahel Java kaupluste tekst:
- Teisenda märk stringiks
- Teisenda string tähemärgiks
Need kaks tüüpi ei ole omavahel asendatavad. Char on primitiivikood, mis sisaldab täpselt ühte 16-bitist UTF-16 koodiühikut, mis on kirjutatud ülakomade vahel kujul 'g'. String on objekt, mis sisaldab nende koodiühikute jada, mis on kirjutatud jutumärkide vahel kujul „Guru99”. Kuna üks on primitiivne ja teine objekt, ei saa ükski teisendus neid ühendada – töö peab ära tegema teegimeetod ja Java varustab ühe iga suuna jaoks.
Teisendage täht stringiks
Tähemärgi stringiks teisendamiseks on mitu võimalust JavaSisemiselt a Java String salvestab oma teksti koodiühikute massiivina, mistõttu üksik märk sobib nii kergesti ühte massiivi. Märk on 16-bitine kahe baiti laiune märgita andmetüüp, mis sisaldab väärtusi vahemikus 0 kuni 65 535.
Me saame tähemärgi (char) stringiks teisendada kahe meetodi abil — staatilise toString() meetodi abil Character klassis ja staatilise valueOf() meetodi abil String klassis. Mõlemad tagastavad uue ühe tähemärgi pikkuse stringi ja kaks allolevat programmi väljastavad sama tulemuse.
1. meetod: meetodi toString() kasutamine
Allolev programm salvestab g-tähe a-sse. char muutuja ja edastab selle funktsioonile Character.toString(), mis tagastab selle üksiku tähemärgi stringina. Koodi saab muuta, seega muutke tähte ja käivitage see uuesti, et näha väljundit.
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);
}
}
Eeldatav väljund:
String is: g
2. meetod: ValueOf() meetodi kasutamine
Teine programm vahetab String.valueOf(myChar) väärtuse ja ei muuda midagi muud. Kuna Java 9 on need kaks kutset sama toiming: Character.toString(char) on rakendatud String.valueOf(char) kutse asemel, seega pole kumbki mõõdetavalt kiirem kui teine.
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);
}
}
Eeldatav väljund:
String is: g
Muud viisid märgi stringiks teisendamiseks
Vanemas koodis ja intervjuuküsimustes ilmneb veel neli meetodit. Need kõik toimivad, kuid ükski neist ei ole nii selgelt loetav kui kaks ülaltoodud meetodit ja kaks neist eraldavad rohkem ressurssi kui vaja.
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); } }
Eeldatav väljund:
gggg
Tabelis on kirjas, millal iga marsruuti tasub kasutada.
| Meetod | Näide | märkused |
|---|---|---|
| String.valueOf(märk) | String.valueOf(minuMärk) | Soovitatav. Üks kutse, tagastatud stringile lisaks pole ühtegi lisaobjekti. |
| Märk.stringiks(märk) | Märk.stringiks(minuMärk) | Sama hea. Saadaval alates Java 1.4 ja delegeerib String.valueOf-ile alates Java 9. |
| Liitmine | minuChar + “” | Töötab ja edasi Java 9 ja hilisemad versioonid kompileerivad selle invokedynamic kutse asemel StringBuilderiks, seega vana hoiatus selle aeglase olemuse kohta enam ei kehti. See peidab endiselt tegelikku eesmärki. |
| Märgiümbris | Character.valueOf(myChar).toString() | Boxes märgista esmalt char. Kasuta Character.valueOf, mitte uut Character(char) konstruktorit, mis on alates ...-st aegunud ja eemaldatud. Java 9. |
| märkide massiiv | uus string(uus märk[]{minuMärk}) | Eraldab massiivi ja kopeerib selle. Reserveerib selle juhuks, kui sul on juba olemas char-massiiv. |
| String.format | String.format("%c", minuChar) | Kaugelt kõige aeglasem, kuna vormingustringi parsitakse käitusajal. Kasulik ainult siis, kui märk on osa suuremast mallist. |
Kui ühe tähemärgi teisendamise mõlemad suunad on kaetud, on järgmisena tegemist vastupidise toiminguga.
Teisenda string tähemärgiks
Stringi saab teisendada tähemärgiks (char), kasutades String-klassi meetodit charAt(). Meetod võtab nullpõhise indeksi ja tagastab sellel positsioonil oleva tähemärgi (char), seega iga tähemärgi lugemine tähendab looping 0-st kuni length() miinus üheni. Indeksi küsimine väärtusega alla 0 või väärtusega length() ja sellest suurem tekitab StringIndexOutOfBoundsException'i.
Allolev programm kõnnib nööril Guru99 üks positsioon korraga ja prindib iga märgi koos indeksiga.
//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);
}
}
}
Eeldatav väljund:
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
Pane tähele, et stringi ei saa lihtsalt teisendada: char c = (char) myStr; ei kompileeru, sest string on objekt ja char on primitiivne. Stringi puhul, mis teadaolevalt sisaldab täpselt ühte märki, on kogu vastus charAt(0).
Stringi teisendamine tähemärkide massiiviks ja tagasi
Kui iga märki on vaja korraga, mitte ühte indeksit korraga, annab toCharArray() tagasi värske sümboolne massiivSelle massiivi tagasi tekstiks muutmine on String(char[]) konstruktori või String.valueOf(char[]) ülesanne ning mõlemad kopeerivad massiivi kaitsvalt, nii et hilisemad massiivi muudatused ei muuda stringi.
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)); } }
Eeldatav väljund:
6 G Guru99 Guru99 Guru
Neljas meetod, getChars(srcBegin, srcEnd, dst, dstBegin), kopeerib vahemiku juba olemasolevasse massiivi uue eraldamise asemel. Lõppindeks on eksklusiivne, mistõttu getChars(0, 4, part, 0) annab tulemuseks Guru mitte Guru9. Leviala piiridest väljas olevad piirid viskavad „IndexOutOfBoundsException”.
Need kolm lähenemisviisi erinevad peamiselt selle poolest, millele nad eraldavad, nagu allpool kokku võetud.
| Ülesanne | Helista | Mida see eraldab |
|---|---|---|
| Stringist char-massiiv | minuStr.märgimassiiviks() | Uus massiiv; turvaline tühjal stringil, kus see tagastab nullpikkusega massiivi. |
| tähestiku massiiv stringiks | uus String(tähed) või String.valueOf(tähed) | Uus string pluss massiivi sisemine koopia. |
| Vahemik olemasolevasse massiivi | myStr.getChars(0, 4, osa, 0) | Midagi uut pole; see kirjutab sinu antud massiivi. |
Levinud vead char ja string teisendamisel Java
Enamik nende konversioonide probleemidest tuleneb pigem kuuest korduvast veast kui meetoditest endist. Tabelis on iga viga koos parandusega paaristatud.
| Probleem | Põhjus | Määrama |
|---|---|---|
| Ühildamatud tüübid: stringi ei saa teisendada tähemärgiks | Katse teisendada, näiteks char c = (char) myStr; | Selle asemel kutsume välja funktsiooni myStr.charAt(0). Objekti ja primitiivi vahel ei ole teisendust. |
| StringIndexOutOfBoundsException | charAt() kutsutakse välja negatiivse indeksiga või length() abil tühja stringi korral | Enne lugemist valva isEmpty() funktsiooniga või võrdle indeksit length() funktsiooniga. |
| String.valueOf(null) viskab NullPointerExceptioni | Paljas null vastab char[] ülekoormusele, mis on kõige spetsiifilisem. | Kirjuta String.valueOf((Object) null), kui literaaltekst null on see, mida sa tahad. |
| Character.toString(65) tagastab A, mitte 65 | Java 11 lisas Character.toString(int) ülekoormuse, mis loeb oma argumendi Unicode'i koodipunktina | Numbrite 65 jaoks kasutage funktsiooni String.valueOf(65) või Integer.toString(65). |
| Emotikon prinditakse kahe moonutatud sümbolina | U+FFFF-ist kõrgemad tähemärgid hõivavad kaks tähemärki: kõrge asendusmärgi ja seejärel madala asendusmärgi. | Loe väärtust funktsiooniga codePointAt(0) ja seejärel loo see uuesti funktsiooniga Character.toString(codePoint) Java 11 ja hiljem. |
| Uue tähemärgi (myChar) aegumise hoiatus | Character(char) konstruktor on aegunud alates Java 9 ja eemaldamiseks märgitud | Kasuta Character.valueOf(myChar) või lase autoboxingil ümbrise pakkuda. |
Sama String klass toetab paljusid naaberharjutusi: stringi ümberpööramine rekursiooniga, kahe stringi võrdlemineja vormindatud väljundi printimine.
