Bir dizeyi kayan nokta veya tamsayı gibi sayısal bir değere dönüştürmeye çalıştığımızda NumberFormatException atılır, ancak giriş dizesinin formatı uygun veya yasa dışı değildir. Yasadışı formatla, bir dizeyi bir tamsayıya ayrıştırmaya çalışıyorsanız ancak String bir boolean değeri içeriyorsa, bunun geçersiz formatta olduğu anlamına gelir. Örneğin - bir dizeyi tam sayıya ayrıştırmaya çalışırsak ancak dize boşsa.
Bu denetlenmeyen bir istisnadır. Bu bir alt sınıftır YasadışıTartışmaİstisna ve uygular Serileştirilebilir arayüz.
jvm
NumberFormatException Oluşturucuları
Oluşturucu | Tanım |
---|---|
NumberFormatException() | Bu, belirtilen ayrıntılı mesajı olmayan bir NumberFormatException oluşturur. |
NumberFormatException(String s) | Bu, string s'de belirtilen ayrıntılı bir mesajla bir NumberFormatException oluşturur. |
NumberFormatException örneği
public class Example { public static void main(String[] args) { int a = Integer.parseInt(null); //throws Exception as //the input string is of illegal format for parsing as it is null. } }
Çıktı:
NumberFormatException'ın yaygın nedenleri
NumberFormatException, istisnayı atan yöntemin ilgili argümanı için dizenin uygun olmayan formatı nedeniyle oluştuğundan, bunun çeşitli yolları olabilir. Bunlardan birkaçından şu şekilde bahsedilmektedir:
- Sağlanan giriş dizesi boş olabilir.
Örnek- Integer.parseInt(null); - Giriş dizesi boş olabilir.
Örnek- Integer.parseInt(''); - Giriş dizesinin sonunda boşluk olabilir.
Örnek- Integer.parseInt('123'); - Giriş dizesinin başında bir boşluk olabilir.
Örnek- Integer.parseInt(' 123'); - Giriş dizesi alfanümerik olabilir.
Örnek- Long.parseLong('b2'); - Giriş dizesi, ayrıştırılan dizeyi depolayan veri türü aralığını aşabilecek bir girişe sahip olabilir.
Örnek- Integer.parseInt('135'); Tamsayının mümkün olan maksimum değeri 127 olabilir, ancak dizedeki değer 135'tir ve bu aralık dışındadır, bu nedenle bu istisnayı atacaktır. - Giriş dizesi ile ayrıştırma için kullanılan yöntemin türü arasında bir uyumsuzluk olabilir. '1.0' gibi bir giriş dizesi sağlarsanız ve bu dizeyi bir tamsayı değerine dönüştürmeye çalışırsanız, bir NumberFormatException istisnası oluşturulur.
Örnek- Integer.parseInt('1..0');
NumberFormatException'dan nasıl kaçınılır?
NumberFormatException temel olarak giriş dizesinin iyi biçimlendirilmemesinden veya sayısal bir değere ayrıştırılırken yasa dışı olmasından kaynaklanır. Dolayısıyla, bu istisnayı önlemek için sağlanan giriş dizesinin iyi biçimlendirilmiş olması gerekir.
Geçerli ve iyi biçimlendirilmiş bir dizeye sahip olmak için öncelikle giriş dizesinin boş olup olmadığını kontrol edin. Ardından, gereksiz boşlukları kontrol edin ve hepsini kesin, ardından argüman dizisinin, dizeyi ayrıştırmak için kullandığımız yöntemin türüyle eşleştiğini doğrulamak için birkaç kontrol yapın. Yöntem ParseInt() ise, dizenin bir tamsayı değerine sahip olup olmadığını kontrol edin ve aynı şekilde diğer tüm yöntemler için gerekli kontrolleri yapın.
Bir Java programının NumberFormatException oluşturmasını önlemek için, bu istisnayı atabilecek kod satırlarını aşağıda gösterildiği gibi bir try-catch bloğu içine almak her zaman iyi bir uygulamadır.
public class NumberFormatExceptionExample { private static final String inputString = '123.33'; public static void main(String[] args) { try { int a = Integer.parseInt(inputString); }catch(NumberFormatException ex){ System.err.println('Invalid string in argumment'); //request for well-formatted string } } }