برای تبدیل String به Int در جاوا، یا به عبارتی، تبدیل رشته به عدد، راههای زیادی وجود دارد! و البته منظور ما از تبدیل، این است محتوای یک رشته به طور کامل یک مقدار عددی Int باشد! یعنی مثلا به صورت زیر:
1 2 3 4 |
String value1 = "20"; // قابل تبدیل است String value2 = "-20"; // قابل تبدیل است String value3 = "20.0"; // فایل تبدیل نیست String value4 = "20 FuLLKade.COM"; // قابل تبدیل نیست |
روشهای تبدیل
در ادامه، روشهای مختلف تبدیل یک رشته به Int را میبینیم که از کلاس Integer استفاده کردهاند! و البته در انتهای روشها، الگوریتم تبدیل را بدون استفاده از متدهای آماده نیز شرح میدهیم!
روش اول: Integer.parseInt
در این روش، از متد parseInt موجود در کلاس Integer، به صورت زیر استفاده میکنیم:
1 2 |
String value = "20"; int number = Integer.parseInt(value); |
این متد، باعث تبدیل یک String به یک Int میشود که البته اگر مقدار رشته، یک عدد Int نباشد، خطای NumberFormatException تولید خواهد شد و بایستی آن را مدیریت کنیم:
1 2 3 4 5 6 7 |
String value = "20.0"; try { int number = Integer.valueOf(value); System.out.println("Number = " + number); } catch (NumberFormatException e) { System.out.println("Error: " + e.getMessage()); } |
پیام زیر چاپ میشود:
روش دوم: Integer.valueOf
این متد نیز همانند متد قبل میباشد:
1 2 |
String value = "20"; int number = Integer.valueOf(value); |
روش سوم: Integer.decode
و این متد نیز همانند متدهای قبل میباشد:
1 2 |
String value = "20"; int number = Integer.valueOf(value); |
روش چهارم: Integer.parseUnsignedInt
این متد نیز همانند قبل است! با این تفاوت که فقط عدد مثبت را تبدیل میکند و اگر عددی منفی باشد، خطا تولید خواهد شد:
1 2 3 4 5 6 7 |
String value = "-20"; try { int number = Integer.parseUnsignedInt(value); System.out.println("Number = " + number); } catch (NumberFormatException e) { System.out.println("Error: " + e.getMessage()); } |
و اما خروجی کد بالا:
روش پنجم: new Inreger
در این روش، با نمونهسازی از کلاس Integer و ارسال متغیر رشتهای به داخل آن، تبدیل را انجام میدهیم:
1 2 |
String value = "20"; int number = new Integer(value); |
روش نهایی: الگوریتم تبدیل
این الگوریتم، حرف به حرف رشته را مورد بررسی قرار داده و حتی برای رشتهای که شامل عدد بوده و اول عدد حرف + قرار دارد نیز کار میکند! چراکه آن را به عنوان عدد مثبت در نظر خواهد گرفت!
روش اول پیادهسازی با تبدیل به آرایهی بایتی:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
public static int toInt(String value) { int output = 0; boolean isFirstCharacter = true; boolean isNegativeNumber = false; byte bytes[] = value.getBytes(); for (int i = 0; i < bytes.length; i++) { char c = (char) bytes[i]; if (!Character.isDigit(c)) { isNegativeNumber = (c == '-'); if (!(isFirstCharacter && (isNegativeNumber || c == '+'))) { throw new NumberFormatException("For input string \"" + value + "\""); } } else { int number = Character.getNumericValue(c); output = output * 10 + number; } isFirstCharacter = false; } if (isNegativeNumber) output *= -1; return output; } |
روش دوم پیادهسازی با استفاده از متد charAt:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
public static int toInt(String value) { int output = 0; boolean isFirstCharacter = true; boolean isNegativeNumber = false; for (int i = 0; i < value.length(); i++) { char c = value.charAt(i); if (!Character.isDigit(c)) { isNegativeNumber = (c == '-'); if (!(isFirstCharacter && (isNegativeNumber || c == '+'))) { throw new NumberFormatException("For input string \"" + value + "\""); } } else { int number = Character.getNumericValue(c); output = output * 10 + number; } isFirstCharacter = false; } if (isNegativeNumber) output *= -1; return output; } |
مثالها:
1 2 3 4 5 6 7 8 9 10 |
int number1 = toInt2("20"); int number2 = toInt2("-20"); int number3 = toInt2("+20"); System.out.println("Numbers = " + number1 + ", " + number2 + ", " + number3); try { toInt2("20 Hadi"); } catch (NumberFormatException e) { System.out.println("Error: " + e.getMessage()); } |
خروجیها:
Error: For input string “20 Hadi”
نظرات ثبت شده بدون دیدگاه