2013-02-27 30 views
19

ben Aşağıdaki örnek, daha iyi i yapmaya çalışıyorum açıklamak zorunda: i istediğini,Java bölünmüş

I = 0 a 

I = 1 b 

I = 2 

I = 3 

I = 4 

I = 5 c 

Ama:

String text = "a,b,,,,c,,"; 
String[] split = text.split(","); 
for(int i=0;i<split.length;i++){ 
    System.out.println("I = "+i+" "+split[i]); 
} 

çıkışı son 2 elementler boş dizeler olacak, tabii

I = 6 

I = 7 

, ancak m için gereklidir: boyutu 8 dizisini almak için, ayrıca içeren e onları almak için. Ayrıca, sahip olmak mantıklı olduğunu düşünüyorum. Ben olsaydı Yani:

String text = "a,b,,,,c,,d"; 

sonuç büyüklüğü 8 dizisidir olacak ve ben 2 örneklerle arasında büyük fark olduğunu düşünmüyorum.

cevap

26
String[] split = text.split(",", -1); 

Bu davranış aslında zor görünüyor ama aslında official documentation içinde (söz konusu değil çok iyi IMHO) açıklanmıştır. n, pozitif olmayan sonra model mümkün olduğu kadar çok kez tatbik edilecektir ve dizi text.split(",") ile sorun text.split(",", 0) eşdeğer olmasıdır herhangi bir uzunluk

sahip olabilir ise

. belgelerinde açıklandığı şekilde, bir 0 limiti kullanılarak: N, sonra model mümkün olduğu kadar çok kez uygulanacaktır sıfırsa

, dizi herhangi bir uzunlukta olabilir ve atılır boş dizeleri arka.

Boş dizelerin atılmasını kesinlikle istemezsiniz.

+6

Vay. Ben "String # split" gibi temel bir şey hakkında yeni bir şeyler öğrenebileceğimi düşünmemiştim. Ben hatalıydım. Hem soru hem de cevap çok eğitimliydi. Bu, kullanıcı * açıklama sunarak, iyi bir cevap almak ve harika yapmak dedi. –

+0

Teşekkür ederim, harika çalışıyor! Java'da yaklaşık 3 yıldır uygulama yaptım, ama ilk bakışta basit görünseler bile her zaman öğrenilecek yeni şeyler var gibi görünüyor. – Anakin001

+0

@ T.J.Crowder Geçen hafta bu problemi yaşadım ve bu işe yaradı. Aslında bunun neden iyi çalıştığını/neden anlamıyorum ve bu konuyla ilgili dokümantasyon çok net değil – m0skit0

0

(Harici kütüphaneleri kullanabilirsiniz ise) tercihim: StringUtils kütüphane çünkü varsayılan java uygulaması daha sadece biraz daha verimli olma eğilimindedir Çoğunlukla

String[] split = StringUtils.splitPreserveAllTokens(text, ',');

... iyi Hey, bu yüzden Apache bunu yazarken rahatsız ediyordu. Artı, bunun karşısında, bu bölünmenin yöntem isminden ne yaptığı açık, oysa ilk bakışta, -1 sınırı olan düzenli bir dizge bölünmeyebilir.