การแปลง String เป็น int ใน Java มีหลายวิธี แต่ละวิธีมีความแตกต่างเล็กน้อย บทความนี้จะครอบคลุมทุกวิธีพร้อม best practices
วิธีหลัก 3 วิธี (String มีแต่ตัวเลข)
1. Integer.parseInt() → คืนค่า primitive int
String numberStr = "1234";
int number = Integer.parseInt(numberStr);
System.out.println(number); // 1234
✅ แนะนำสำหรับใช้งานทั่วไป - ประสิทธิภาพดี ไม่สร้าง Object เพิ่ม
2. Integer.valueOf() → คืนค่า Integer object
String numberStr = "1234";
Integer number = Integer.valueOf(numberStr);
System.out.println(number); // 1234
✅ ใช้เมื่อต้องการ Integer object (เช่น ใส่ใน Collection) - ใช้ cache สำหรับค่า -128 ถึง 127
3. Integer.decode() → รองรับฐานเลขต่างๆ
Integer.decode("1234"); // 1234 (ฐาน 10)
Integer.decode("0xFF"); // 255 (ฐาน 16 - hex)
Integer.decode("0177"); // 127 (ฐาน 8 - octal)
Integer.decode("#FF"); // 255 (ฐาน 16 ด้วย #)
✅ ใช้เมื่อ String มี prefix แสดงฐานเลข (0x, 0, #)
การจัดการ Exception
ทุกเมธอดข้างต้นจะโยน NumberFormatException ถ้า String ไม่ใช่ตัวเลข
public static int safeParseInt(String str, int defaultValue) {
try {
return Integer.parseInt(str);
} catch (NumberFormatException e) {
return defaultValue;
}
}
4. Apache Commons NumberUtils (Null-Safe)
Dependency (Maven)
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.14.0</version>
</dependency>
การใช้งาน
import org.apache.commons.lang3.math.NumberUtils;
NumberUtils.toInt("1234"); // 1234
NumberUtils.toInt("abc", 0); // 0 (ค่า default ถ้า parse ไม่ได้)
NumberUtils.toInt(null, -1); // -1 (null-safe!)
NumberUtils.createInteger("123"); // คืนค่า Integer object
✅ แนะนำเมื่อ String อาจเป็น null หรือต้องการ default value
กรณี String มีตัวอักษรผสม (เช่น "1234abcd")
ต้องใช้ Regex แยกตัวเลขก่อน แล้วค่อยแปลง
String mixed = "1234abcd";
String numbersOnly = mixed.replaceAll("\\D+", ""); // "1234"
int number = Integer.parseInt(numbersOnly);
สรุป: การเลือกใช้
| สถานการณ์ | วิธีที่แนะนำ |
|---|---|
| ใช้งานทั่วไป ต้องการ primitive int | Integer.parseInt() |
| ต้องการ Integer object / ใช้ใน Collection | Integer.valueOf() |
| String มี prefix ฐานเลข (0x, #, 0) | Integer.decode() |
| String อาจเป็น null / ต้องการ default value | NumberUtils.toInt() |