Char'ı String'e Dönüştürme Java (Örnekler)
⚡ Akıllı Özet
Karakteri dizeye dönüştürme Java Tek bir String.valueOf(myChar) veya Character.toString(myChar) çağrısı gerektirir. Ters yönde hareket etmek için charAt(index) kullanılır ve bu, bir String'den konumuna göre bir karakter çıkarır.
Bu eğitimde, bir değeri iki yol arasında taşıyan iki kısa programı inceleyeceğiz. Java depolanan metin:
- Karakteri dizeye dönüştürün
- Bir dizeyi karaktere dönüştürün.
İki tür birbirinin yerine kullanılamaz. 'Char', tek tırnak içinde 'g' olarak yazılan, tam olarak bir adet 16 bitlik UTF-16 kod birimini tutan bir temel veri türüdür. 'String' ise çift tırnak içinde "" olarak yazılan, bu kod birimlerinin bir dizisini tutan bir nesnedir.Guru99”. Çünkü biri temel bir tür, diğeri bir nesne olduğundan, aralarında köprü kurmak için tür dönüştürme işlemi kullanılamaz; bu işi bir kütüphane yöntemi yapmalıdır ve Java Her yön için bir tane temin edilir.
Char'ı String'e Dönüştür
Bir karakteri bir dizeye dönüştürmenin birden fazla yolu vardır. JavaDahili olarak a Java String, metnini saklar. Bir dizi kod birimi olarak, bu nedenle tek bir karakter (char) bunlardan birine bu kadar kolay yerleşir. Char, 0 ile 65,535 arasında değerler tutabilen, iki bayt genişliğinde, 16 bitlik işaretsiz bir veri türüdür.
Bir karakteri (char) bir dizeye (string) dönüştürmek için iki yöntem kullanabiliriz: Character sınıfındaki statik toString() yöntemi ve String sınıfındaki statik valueOf() yöntemi. Her ikisi de tek karakter uzunluğunda yepyeni bir dize döndürür ve aşağıdaki iki program aynı sonucu verir.
Yöntem 1: toString() yöntemini kullanma
Aşağıdaki program "g" harfini bir değişkene kaydeder. karakter değişkeni ve bu karakteri Character.toString() fonksiyonuna iletir; bu fonksiyon da o tek karakteri bir String olarak döndürür. Kod düzenlenebilir olduğundan, harfi değiştirip tekrar çalıştırarak çıktının nasıl değiştiğini izleyebilirsiniz.
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);
}
}
Beklenen çıktı :
String is: g
Yöntem 2: valueOf() yöntemini kullanma
İkinci program, String.valueOf(myChar) değerini kullanıyor ve başka hiçbir şeyi değiştirmiyor. Çünkü Java 9. İki çağrı da aynı işlemi gerçekleştiriyor: Character.toString(char) ifadesi String.valueOf(char) çağrısı olarak uygulanıyor, bu nedenle ikisinden birinin diğerinden ölçülebilir derecede daha hızlı olduğu söylenemez.
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);
}
}
Beklenen çıktı :
String is: g
Karakteri Dizeye Dönüştürmenin Diğer Yolları
Eski kodlarda ve mülakat sorularında dört farklı yol daha karşımıza çıkıyor. Hepsi çalışıyor, ancak hiçbiri yukarıdaki iki yöntem kadar açık ve anlaşılır değil ve ikisi gerekenden fazla bellek tahsis ediyor.
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); } }
Beklenen çıktı:
gggg
Tablo, her bir güzergahın ne zaman kullanılmaya değer olduğunu göstermektedir.
| Yöntem | Örnek E-posta | notlar |
|---|---|---|
| Dize.değeri(karakter) | Dize.değeri(myChar) | Tavsiye edilir. Tek çağrı, döndürülen dizenin ötesinde ek bir nesne yok. |
| Karakter.toString(char) | Karakter.toString(myChar) | Aynı derecede iyi. Şu tarihten beri mevcut. Java 1.4 ve String.valueOf'a yetki devrediyor çünkü Java 9. |
| birbirine bağlama | myChar + “” | Eserler ve üzerine Java 9 ve sonrasında StringBuilder yerine invokedynamic çağrısına derlenir, bu nedenle yavaş olduğuna dair eski uyarı artık geçerli değildir. Yine de amacını gizler. |
| Karakter sarmalayıcı | Karakter.değeri(myChar).dizeyedönüştür() | BoxÖncelikle karakteri alın. Yeni Character(char) yapıcı metodu yerine Character.valueOf kullanın; bu metot, kullanımdan kaldırılmak üzere 2017'den beri kullanımdan kaldırılmıştır. Java 9. |
| karakter dizisi | yeni Dize(yeni karakter dizisi {myChar}) | Bir dizi ayırır ve kopyalar. Bu özelliği, halihazırda bir karakter dizisine sahip olduğunuz durumlar için ayırın. |
| Dize.biçimlendirme | Dize.biçim("%c", myChar) | En yavaş yöntemdir, çünkü format dizesi çalışma zamanında ayrıştırılır. Yalnızca karakter daha büyük bir şablonun parçası olduğunda kullanışlıdır. |
Tek karakter dönüştürmenin her iki yönü de ele alındığına göre, sırada ters işlem var.
String'i karaktere dönüştür
String sınıfının charAt() metodunu kullanarak bir String'i char'a dönüştürebiliriz. Bu metot sıfır tabanlı bir indeks alır ve o konumda bulunan karakteri döndürür; bu nedenle her karakteri okumak şu anlama gelir: tuvaletping 0'dan length() eksi bire kadar indeks değerleri alınabilir. 0'ın altında veya length() ve üzeri bir indeks değeri istendiğinde StringIndexOutOfBoundsException hatası fırlatılır.
Aşağıdaki program dizeyi dolaşır. Guru99 karakteri tek tek konumlandırır ve her karakteri indeksiyle birlikte yazdırır.
//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);
}
}
}
Beklenen çıktı:
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
Unutmayın ki bir String'i doğrudan dönüştüremezsiniz: `char c = (char) myStr;` derlenmez, çünkü String bir nesnedir ve `char` bir temel veri türüdür. Tam olarak bir karakter içerdiği bilinen bir String için, `charAt(0)` tüm cevabı verir.
Bir Dizeyi Karakter Dizisine ve Geri Dönüştürme
Her karakterin aynı anda, tek tek indekslere değil de aynı anda gerekli olduğu durumlarda, toCharArray() yöntemi geri dönüş değeri döndürür. yeni bir kömür dizisiBu diziyi tekrar metne dönüştürmek, String(char[]) yapıcı fonksiyonunun veya String.valueOf(char[]) fonksiyonunun görevidir ve her ikisi de diziyi koruyucu bir şekilde kopyalar, böylece dizide yapılan sonraki düzenlemeler String'i değiştirmez.
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)); } }
Beklenen çıktı:
6 G Guru99 Guru99 Guru
Dördüncü bir yöntem olan getChars(srcBegin, srcEnd, dst, dstBegin), yeni bir dizi ayırmak yerine, bir aralığı zaten sahip olduğunuz bir diziye kopyalar. Bitiş indeksi hariç tutulur, bu nedenle getChars(0, 4, part, 0) şu sonucu verir: Guru ziyade Guru9. Aralık dışı sınırlar IndexOutOfBoundsException hatası fırlatır.
Aşağıda özetlendiği gibi, üç yaklaşım esas olarak tahsis ettikleri kaynaklar bakımından farklılık gösterir.
| Görev | Çağrı | Neyi tahsis eder? |
|---|---|---|
| Dizeyi karakter dizisine dönüştür | myStr.toCharArray() | Yeni bir dizi; boş bir dize üzerinde güvenlidir, bu durumda sıfır uzunlukta bir dizi döndürür. |
| Karakter dizisini dizeye dönüştür | yeni String(karakterler) veya String.valueOf(karakterler) | Yeni bir String ve dizinin dahili bir kopyası. |
| Mevcut bir diziye aralık ekle | myStr.getChars(0, 4, part, 0) | Yeni bir şey yok; sizin verdiğiniz diziye yazıyor. |
Karakter ve Dize Dönüştürme İşlemlerinde Sık Karşılaşılan Hatalar Java
Bu dönüşümlerdeki sorunların çoğu, yöntemlerin kendisinden ziyade altı tekrar eden hatadan kaynaklanmaktadır. Tablo, her birini çözümüyle eşleştirmektedir.
| Sorun | Sebeb olmak | sabit |
|---|---|---|
| Uyumsuz türler: Dize, karakter türüne dönüştürülemez. | Örneğin, char c = (char) myStr; şeklinde bir dönüştürme girişimi. | Bunun yerine myStr.charAt(0)'ı çağırın. Bir nesne ile bir ilkel veri türü arasında tür dönüştürme yoktur. |
| StringIndexOutOfBoundsException | charAt() fonksiyonu negatif bir indeksle veya boş bir String üzerinde length() fonksiyonuyla çağrıldığında | Okuma işlemine başlamadan önce isEmpty() ile kontrol edin veya indeksi length() ile karşılaştırın. |
| String.valueOf(null) NullPointerException hatası fırlatır. | Null değeri, en spesifik olan char[] aşırı yüklemesiyle eşleşir. | Eğer "null" metnini doğrudan kullanmak istiyorsanız, String.valueOf((Object) null) yazın. |
| Character.toString(65) 65 değil, A döndürür. | Java 11. sürümde, argümanını Unicode kod noktası olarak okuyan Character.toString(int) aşırı yüklemesi eklendi. | 65 rakamı için String.valueOf(65) veya Integer.toString(65) kullanın. |
| Emoji, iki anlaşılmaz sembol olarak yazdırılır. | U+FFFF'nin üzerindeki karakterler iki karakter kaplar; önce yüksek bir vekil karakter, ardından düşük bir vekil karakter gelir. | codePointAt(0) ile değeri okuyun, ardından Character.toString(codePoint) ile yeniden oluşturun. Java 11 ve sonrası. |
| Yeni Karakter (myChar) için kullanımdan kaldırma uyarısı. | Character(char) yapıcı fonksiyonu, şu tarihten beri kullanımdan kaldırılmıştır. Java 9 ve kaldırılmak üzere işaretlendi | Character.valueOf(myChar) kullanın veya otomatik kutulama işleminin sarmalayıcıyı sağlamasına izin verin. |
Aynı String sınıfı, birçok komşu alıştırmayı destekler: Özyinelemeli yöntemle bir dizenin tersini alma, iki dizeyi karşılaştırmak, ve Biçimlendirilmiş çıktı yazdırma.
