Elimine ederek başlayalım StringTokenizer. Yaşlanıyor ve düzenli ifadeleri bile desteklemiyor. Belgelerinde şunlar belirtiliyor:
StringTokenizerkullanımı yeni kodda kullanılmamasına rağmen uyumluluk nedeniyle saklanan eski bir sınıftır. Bu işlevselliği arayan herkesin bunun yerine veya splityöntemini kullanması önerilir .Stringjava.util.regex
Öyleyse hemen atalım. Bırakıyor split()ve Scanner. Aralarındaki fark nedir?
Birincisi, split()foreach döngüsü kullanmayı kolaylaştıran bir dizi döndürür:
for (String token : input.split("\\s+") { ... }
Scanner daha çok bir akış gibi oluşturulmuştur:
while (myScanner.hasNext()) {
String token = myScanner.next();
...
}
veya
while (myScanner.hasNextDouble()) {
double token = myScanner.nextDouble();
...
}
(Oldukça büyük bir API'ye sahip , bu yüzden her zaman böyle basit şeylerle sınırlı olduğunu düşünmeyin.)
Bu akış tarzı arayüz, ayrıştırmaya başlamadan önce tüm girdilere sahip olmadığınız (veya alamadığınız) basit metin dosyalarını veya konsol girişini ayrıştırmak için yararlı olabilir.
Şahsen, hatırlayabildiğim tek zaman Scannerokul projeleri için, komut satırından kullanıcı girişi almak zorunda kaldığım zamandır . Bu tür işlemleri kolaylaştırır. Ama eğer Stringbölmek istediğim bir şey varsa , bu neredeyse devam etmek için beyinsizdir split().