NumberFormatException এবং তার সমাধান

Java.math এর মধ্যে Exception Handling - জাভা ম্যাথ প্যাকেজ (Java.math Package) - Java Technologies

285

NumberFormatException হল Java তে একটি রানটাইম এক্সেপশন (runtime exception), যা ডেটা টাইপের ভুল ফর্ম্যাট অথবা অব্যবহৃত ফরম্যাটের কারণে ঘটে। সাধারণত, এটি তখন ঘটে যখন আপনি একটি স্ট্রিং মানকে প্রত্যাশিত সংখ্যায় রূপান্তর করতে চান (যেমন Integer.parseInt(), Double.parseDouble() ইত্যাদি), কিন্তু স্ট্রিংটি সংশ্লিষ্ট নম্বর টাইপের মানে কনভার্ট করা সম্ভব নয়।

NumberFormatException এর কারণ:

  1. অসংখ্যাত স্ট্রিং ইনপুট: যখন আপনি একটি স্ট্রিং দিয়ে কোনো সংখ্যা রূপান্তর করতে চান, এবং সেই স্ট্রিংটি একেবারেই সংখ্যার মতো না হয় (যেমন, অক্ষর বা বিশেষ চিহ্নের উপস্থিতি)।
  2. অপর্যাপ্ত সংখ্যার দৈর্ঘ্য: যেমন, একাধিক দশমিক স্থান বা অতিরিক্ত সংখ্যার উপস্থিতি।
  3. বিভিন্ন ভাষার সংস্করণ: কিছু ভাষার সংস্করণে কমা (,) বা ডট (.) এর ব্যবহার সংখ্যা বিন্যাসে পরিবর্তন ঘটাতে পারে।

NumberFormatException উদাহরণ:

1. NumberFormatException উদাহরণ (সাধারণ)

public class NumberFormatExceptionExample {
    public static void main(String[] args) {
        try {
            String str = "123abc"; // Invalid number format (contains letters)
            int number = Integer.parseInt(str); // This will throw NumberFormatException
            System.out.println("Number: " + number);
        } catch (NumberFormatException e) {
            System.out.println("Error: " + e.getMessage());
        }
    }
}

Output:

Error: For input string: "123abc"

ব্যাখ্যা:

  • Integer.parseInt("123abc") এটি একটি অসংখ্যাত স্ট্রিং যা NumberFormatException তৈরি করবে, কারণ স্ট্রিংটি একটি বৈধ পূর্ণসংখ্যায় রূপান্তরিত করা সম্ভব নয়।

2. NumberFormatException: Decimal Number Formatting Issue

public class NumberFormatExceptionDecimalExample {
    public static void main(String[] args) {
        try {
            String str = "123.45.67"; // Invalid decimal format
            double number = Double.parseDouble(str); // This will throw NumberFormatException
            System.out.println("Number: " + number);
        } catch (NumberFormatException e) {
            System.out.println("Error: " + e.getMessage());
        }
    }
}

Output:

Error: For input string: "123.45.67"

ব্যাখ্যা:

  • Double.parseDouble("123.45.67") এর মধ্যে দুটি দশমিক পয়েন্ট রয়েছে, যা একটি অবৈধ দশমিক সংখ্যা এবং এর ফলে NumberFormatException তৈরি হবে।

NumberFormatException সমাধান:

1. স্ট্রিং ফর্ম্যাট যাচাই করা:

এটি নিশ্চিত করতে হবে যে স্ট্রিংটি একটি বৈধ সংখ্যার ফর্ম্যাটে রয়েছে। আপনি try-catch ব্লক ব্যবহার করতে পারেন এবং স্ট্রিংয়ের মধ্যে অক্ষর বা অবৈধ চিহ্ন পরীক্ষা করতে পারেন।

2. try-catch ব্লক ব্যবহার করা:

NumberFormatException এক্সেপশন হ্যান্ডলিংয়ের জন্য try-catch ব্লক ব্যবহার করা যেতে পারে।

3. ইনপুটের বৈধতা যাচাই করা:

স্ট্রিংটি যদি শুধুমাত্র সংখ্যার অংশ ধারণ করে, তবে Integer.parseInt(), Double.parseDouble() ইত্যাদি ব্যবহার করতে হবে।


NumberFormatException সমাধান সহ উদাহরণ

1. সংখ্যা ফর্ম্যাটে অক্ষর পরীক্ষা করা

public class NumberFormatExceptionSolution {
    public static void main(String[] args) {
        String str = "123abc"; // Invalid string for parsing
        
        try {
            // Check if the string is numeric before parsing
            if (str.matches("[0-9]+")) { // Regular expression to match digits only
                int number = Integer.parseInt(str);
                System.out.println("Number: " + number);
            } else {
                System.out.println("Invalid number format: " + str);
            }
        } catch (NumberFormatException e) {
            System.out.println("Error: " + e.getMessage());
        }
    }
}

Output:

Invalid number format: 123abc

ব্যাখ্যা:

  • str.matches("[0-9]+"): এটি স্ট্রিংটির মধ্যে শুধু ডিজিট থাকে কিনা তা পরীক্ষা করে। যদি না থাকে, তাহলে NumberFormatException প্রতিরোধ করা হয় এবং একটি অবৈধ সংখ্যা ফর্ম্যাট মেসেজ দেখানো হয়।

2. ডেসিমাল সংখ্যা ফর্ম্যাটের সমস্যা সমাধান করা

public class DecimalNumberFormatSolution {
    public static void main(String[] args) {
        String str = "123.45"; // Valid decimal number

        try {
            // Check if the string is a valid decimal number
            if (str.matches("^[+-]?\\d*(\\.\\d+)?$")) { // Regular expression for decimal numbers
                double number = Double.parseDouble(str);
                System.out.println("Valid Number: " + number);
            } else {
                System.out.println("Invalid decimal number format: " + str);
            }
        } catch (NumberFormatException e) {
            System.out.println("Error: " + e.getMessage());
        }
    }
}

Output:

Valid Number: 123.45

ব্যাখ্যা:

  • str.matches("^[+-]?\\d*(\\.\\d+)?$"): এটি স্ট্রিংটি একটি বৈধ দশমিক সংখ্যা কিনা তা নিশ্চিত করে। যদি না হয়, তবে NumberFormatException প্রতিরোধ করা হয়।

  • NumberFormatException Java তে একটি খুবই সাধারণ সমস্যা যা তখন ঘটে যখন স্ট্রিং মানটি নির্দিষ্ট সংখ্যার ফর্ম্যাটে রূপান্তরিত হতে পারে না।
  • এটি try-catch ব্লক এবং regular expressions ব্যবহার করে প্রতিরোধ করা যায়।
  • সঠিক ইনপুট যাচাই করে এবং সঠিক ফর্ম্যাটে সংখ্যাকে রূপান্তর করে আপনি NumberFormatException এড়াতে পারেন।
Content added By
Promotion

Are you sure to start over?

Loading...