Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

วิธีตรวจสอบว่าสตริงแปลงเป็น Double ได้หรือไม่ใน Java

วิธีที่ 1: ใช้ Double.parseDouble() + Try-Catch

เมธอด Double.parseDouble(String) แปลงสตริงเป็น double โยน NumberFormatException หากแปลงไม่ได้ และ NullPointerException หากเป็น null

ตัวอย่าง

import java.util.Scanner;

public class ParsableToDouble {
    public static void main(String[] args) {
        try {
            Scanner sc = new Scanner(System.in);
            System.out.println("Enter a string value: ");
            String str = sc.next();
            Double doub = Double.parseDouble(str);
            System.out.println("Value: " + doub);
        } catch (NumberFormatException ex) {
            System.out.println("Given String is not parsable to double");
        }
    }
}

ผลลัพธ์

Enter a string value: 2245g
Given String is not parsable to double

วิธีที่ 2: ใช้ Double.valueOf()

ทำงานเหมือน parseDouble() แต่คืนค่า Boolean object (wrapper) แทน primitive


Double doub = Double.valueOf(str); // คืนค่า Double object

วิธีที่ 3: ใช้ Constructor Double(String)

Deprecated since Java 9 - ไม่แนะนำให้ใช้ใหม่


Double doub = new Double(str); // @Deprecated

วิธีที่ 4: ใช้ Regex ตรวจสอบก่อนแปลง (No Exception)


import java.util.regex.*;

public class CheckDoubleRegex {
    private static final Pattern DOUBLE_PATTERN = Pattern.compile(
        "^[-+]?(\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?$"
    );
    
    public static boolean isParsableToDouble(String str) {
        return str != null && DOUBLE_PATTERN.matcher(str).matches();
    }
    
    public static void main(String[] args) {
        String[] tests = {"123.45", "-0.5", "1e10", "abc", "12.34.56", ""};
        for (String s : tests) {
            System.out.println(s + " -> " + isParsableToDouble(s));
        }
    }
}

การเปรียบเทียบ

วิธีข้อดีข้อเสีย
try-catch parseDoubleมาตรฐาน จัดการทุกกรณีได้Exception overhead (ช้าถ้า fail บ่อย)
Regexไม่มี exception เร็วกว่าสำหรับ invalid inputRegex ซับซ้อน อาจพลาด edge case
Apache Commons NumberUtils.isCreatable()สะดวก ครอบคลุมต้องเพิ่ม dependency

แนะนำ

ใช้ try-catch parseDouble() สำหรับกรณีทั่วไป (โค้ดชัดเจน มาตรฐาน) ใช้ Regex หากต้อง validate จำนวนมากและ performance critical