1. StringTokenizer
sınıf
Ve şimdi dizelerle çalışmayı içeren birkaç yaygın senaryo daha. Bir dizeyi birkaç parçaya nasıl ayırırsınız? Bunu yapmanın birkaç yolu var.
split()
yöntem
Bir dizeyi birden çok parçaya ayırmanın ilk yolu, yöntemi kullanmaktır split()
. Özel bir sınırlayıcı dize tanımlayan bir normal ifade, bağımsız değişken olarak iletilmelidir. Normal ifadenin ne olduğunu Java Multithreading arayışında öğreneceksiniz .
Örnek:
kod | Sonuç |
---|---|
|
Sonuç, üç dizeden oluşan bir dizi olacaktır:
|
Basit, ancak bazen bu yaklaşım aşırıdır. Çok sayıda sınırlayıcı varsa (örneğin, boşluklar, yeni satır karakterleri, sekmeler, noktalar), o zaman oldukça karmaşık bir normal ifade oluşturmanız gerekir. Okuması ve dolayısıyla değiştirmesi zordur.
StringTokenizer
sınıf
Java'nın tüm işi bir diziyi alt dizilere bölmek olan özel bir sınıfı vardır.
Bu sınıf normal ifadeler kullanmaz: bunun yerine, yalnızca sınırlayıcılardan oluşan bir dize iletirsiniz. Bu yaklaşımın avantajı, tüm diziyi bir kerede parçalara ayırmaması, bunun yerine her seferinde bir adım baştan sona hareket etmesidir.
Sınıfın bir yapıcısı ve iki önemli yöntemi vardır. Kurucuya, parçalara ayırdığımız bir diziyi ve sınırlayıcı karakterlerden oluşan bir diziyi iletiyoruz.
Yöntemler | Tanım |
---|---|
|
Bir sonraki alt dizeyi döndürür |
|
Daha fazla alt dizi olup olmadığını kontrol eder. |
nextLine()
Bu sınıf bir şekilde and yöntemlerine de sahip olan Scanner sınıfını anımsatıyor hashNextLine()
.
StringTokenizer
Bu komutla bir nesne oluşturabilirsiniz :
StringTokenizer name = new StringTokenizer(string, delimiters);
string
Parçalara bölünecek dize nerede . Ve delimiters
bir dizedir ve içindeki her karakter bir sınırlayıcı olarak değerlendirilir. Örnek:
kod | Konsol çıkışı |
---|---|
|
|
Yapıcıya ikinci dize olarak iletilen dizedeki her karakterin StringTokenizer
bir ayırıcı olarak kabul edildiğini unutmayın.
2. String.format()
yöntem ve StringFormatter
sınıf
String sınıfının bir başka ilginç yöntemi de format()
.
Diyelim ki veri depolayan çeşitli değişkenleriniz var. Bunları ekranda tek satırda nasıl görüntülersiniz? Örneğin, bazı verilerimiz (sol sütun) ve istenen çıktımız (sağ sütun) var:
kod | Konsol çıkışı |
---|---|
|
|
Kodunuz muhtemelen şuna benzer:
Program kodu |
---|
|
Böyle bir kod çok okunabilir değil. Değişken adları daha uzun olsaydı, kod daha da zorlaşırdı:
Program kodu |
---|
|
Pek okunmuyor, değil mi?
Ancak bu, gerçek dünya programlarında sık görülen bir durumdur, bu yüzden size bu kodu daha basit ve daha özlü yazmanın bir yolunu anlatmak istiyorum.
String.format
String sınıfının statik bir format()
yöntemi vardır: bir dizeyi verilerle birleştirmek için bir model belirlemenizi sağlar. Komutun genel görünümü aşağıdaki gibidir:
String name = String.format(pattern, parameters);
Örnek:
kod | Sonuç |
---|---|
|
|
|
|
|
|
Yöntemin ilk parametresi , veri eklemeniz gereken yerlerde, istenen tüm metni ve biçim belirticileri ( ve format()
gibi) adı verilen özel karakterleri içeren bir biçim dizesidir .%d
%s
Yöntem format()
, bunları %s
ve %d
biçim belirticilerini, parametre listesindeki biçim dizesini izleyen parametrelerle değiştirir. Bir dize eklemek istiyorsak, yazarız %s
. Bir sayı eklemek istiyorsak, biçim belirleyicisi %d
. Örnek:
kod | Sonuç |
---|---|
|
s eşittir"a=1, b=4, c=3" |
Biçim dizgisi içinde kullanılabilecek biçim belirticilerinin kısa bir listesi aşağıdadır:
belirleyici | Anlam |
---|---|
|
String |
|
tamsayı: byte , short , int ,long |
|
gerçek sayı: float ,double |
|
boolean |
|
char |
|
Date |
|
% karakter |
Bu belirticiler veri tipini belirtir, ancak verilerin sırasını gösteren belirticiler de vardır. Numarasına göre bir argüman elde etmek için (numaralandırma birden başlar), " " yerine " " yazmanız gerekir . Örnek:%1$d
%d
kod | Sonuç |
---|---|
|
s eşittir"a=13, b=12, c=11" |
%3$d
3. bağımsız değişkeni alır, %2$d
ikinci bağımsız değişkeni alır ve %d
ilk bağımsız değişkeni alır. %s
ve biçim belirticileri , veya %d
gibi belirticilerden bağımsız olarak bağımsız değişkenlere atıfta bulunur.%3$d
%2$s
3. Dizi Havuzu
StringPool
Kodda bir dize sabit değeri olarak belirtilen her dize , program çalışırken adı verilen bir bellek alanında saklanır . StringPool
dizeleri depolamak için özel bir dizidir. Amacı, dizi depolamayı optimize etmektir:
İlk olarak, kodda belirtilen dizelerin bir yerde saklanması gerekir, değil mi? Kod komutlardan oluşur, ancak veriler (özellikle büyük diziler) koddan ayrı olarak bellekte saklanmalıdır. Kodda yalnızca dize nesnelerine yapılan başvurular görünür.
İkinci olarak, tüm aynı dize hazır değerleri bellekte yalnızca bir kez saklanmalıdır. Ve işte böyle çalışır. Sınıf kodunuz Java makinesi tarafından yüklendiğinde, StringPool
zaten orada değillerse, tüm dize değişmezleri eklenir. Zaten oradalarsa, o zaman basitçe StringPool
.
String
Buna göre, kodunuzdaki birkaç değişkene aynı sabit değeri atarsanız , bu değişkenler aynı referansı içerecektir. Yalnızca bir kez bir hazır bilgi eklenecektir StringPool
. Diğer tüm durumlarda, kod zaten StringPool
.
İşte kabaca nasıl çalıştığı:
kod | StringPool ile çalışmak |
---|---|
|
|
Bu nedenle a
ve b
değişkenleri aynı referansları saklayacaktır.
intern()
yöntem
Ve en iyi yanı, programlı olarak herhangi bir dizeyi ekleyebilirsiniz StringPool
. String
Bunu yapmak için değişkenin yöntemini çağırmanız yeterlidir intern()
.
Yöntem , dizeyi zaten orada değilse ekleyecek intern()
ve .StringPool
StringPool
StringPool
Yöntemi kullanarak iki özdeş dize eklenirse intern()
, yöntem aynı referansı döndürür. Bu, dizeleri referansa göre karşılaştırmak için kullanılabilir. Örnek:
kod | Not |
---|---|
|
|
|
|
Bu yöntemi pek sık kullanamazsınız, ancak insanlar röportajlarda bunun hakkında soru sormayı sever . Bu yüzden bilmek, bilmemekten daha iyidir.
GO TO FULL VERSION