روش های تبدیل String به Int در جاوا + الگوریتم شخصی

برای تبدیل String به Int در جاوا، یا به عبارتی، تبدیل رشته به عدد، راه‌های زیادی وجود دارد! و البته منظور ما از تبدیل، این است محتوای یک رشته به طور کامل یک مقدار عددی Int باشد! یعنی مثلا به صورت زیر:

String value1 = "20"; // قابل تبدیل است
String value2 = "-20"; // قابل تبدیل است
String value3 = "20.0"; // فایل تبدیل نیست
String value4 = "20 FuLLKade.COM"; // قابل تبدیل نیست

روش‌های تبدیل

در ادامه، روش‌های مختلف تبدیل یک رشته به Int را می‌بینیم که از کلاس Integer استفاده کرده‌اند! و البته در انتهای روش‌ها، الگوریتم تبدیل را بدون استفاده از متدهای آماده نیز شرح می‌دهیم!

روش اول: Integer.parseInt

در این روش، از متد parseInt موجود در کلاس Integer، به صورت زیر استفاده می‌کنیم:

String value = "20";
int number = Integer.parseInt(value);

این متد، باعث تبدیل یک String به یک Int می‌شود که البته اگر مقدار رشته، یک عدد Int نباشد، خطای NumberFormatException تولید خواهد شد و بایستی آن را مدیریت کنیم:

String value = "20.0";
try {
  int number = Integer.valueOf(value);
  System.out.println("Number = " + number);
} catch (NumberFormatException e) {
  System.out.println("Error: " + e.getMessage());
}

پیام زیر چاپ می‌شود:

Error: For input string: “20.0”

روش دوم: Integer.valueOf

این متد نیز همانند متد قبل می‌باشد:

String value = "20";
int number = Integer.valueOf(value);

روش سوم: Integer.decode

و این متد نیز همانند متدهای قبل می‌باشد:

String value = "20";
int number = Integer.valueOf(value);

روش چهارم: Integer.parseUnsignedInt

این متد نیز همانند قبل است! با این تفاوت که فقط عدد مثبت را تبدیل می‌کند و اگر عددی منفی باشد، خطا تولید خواهد شد:

String value = "-20";
try {
  int number = Integer.parseUnsignedInt(value);
  System.out.println("Number = " + number);
} catch (NumberFormatException e) {
  System.out.println("Error: " + e.getMessage());
}

و اما خروجی کد بالا:

Error: Illegal leading minus sign on unsigned string -20.

روش پنجم: new Inreger

در این روش، با نمونه‌سازی از کلاس Integer و ارسال متغیر رشته‌ای به داخل آن، تبدیل را انجام می‌دهیم:

String value = "20";
int number = new Integer(value);

روش نهایی: الگوریتم تبدیل

این الگوریتم، حرف به حرف رشته را مورد بررسی قرار داده و حتی برای رشته‌ای که شامل عدد بوده و اول عدد حرف + قرار دارد نیز کار می‌کند! چراکه آن را به عنوان عدد مثبت در نظر خواهد گرفت!

روش اول پیاده‌سازی با تبدیل به آرایه‌ی بایتی:

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:

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;
}

مثال‌ها:

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());
}

خروجی‌‌ها:

Numbers = 20, -20, 20
Error: For input string “20 Hadi”

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

cp-codfk

نظرات ثبت شده بدون دیدگاه

توضیحات پیشنهادی نظرات اشتراک