تا %60 تخفیف خرید برای 7 نفر با صدور مدرک فقط تا
00 00 00

آموزش جاوا (Java) قسمت 16 : کلاس String و کار با رشته قسمت دو

مهدی عادلی فر
مهدی عادلی فر
5 پسند
2418 بازدید
0 نظر
56 ماه قبل

با سلام به همه دوستان و همراهان Itpro. در مطلب قبلی در مورد رشته ها و کلاس String در جاوا صحبت کردیم. در این مطلب به ادامه بحث قبلی خواهیم پرداخت و متدهای موجود در کلاس String را معرفی خواهیم کرد.

متد copyValueOf

این متد برای تبدیل یک آرایه کاراکتری به یک شئ String به کار می رود. به این معنی که یک آرایه کاراکتری که در هر خانه آن یک کاراکتر وجود دارد را به هم چسبانده و همه را تبدیل به یک رشته می کند. این متد دو شکل استفاده دارد. در یکی از شکل های استفاده از این متد فقط یک آرایه کارکتری به عنوان ورودی گرفته شده و رشته متناظر با آن برگردانده می شود. ولی در روش دوم تبدیل کل آرایه به رشته مد نظر نیست و می خواهیم قسمتی از آرایه را به رشته تبدیل کنیم. برای این کار در روش دوم علاوه بر این که در آرگومان ورودی آرایه کاراکتری را دریافت می کنیم خانه ای که از آن خانه باید شروع کنیم و تعداد خانه هایی که باید انتخاب شوند و به رشته تبدیل شوند نیز باید به عنوان ورودی داده شود. برای مثالی از این متد به کد زیر توجه کنید:

public class Test {

   public static void main(String args[]) {
      char[] Str1 = {'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd'};
      String Str2 = "";

      Str2 = Str2.copyValueOf( Str1 );
      System.out.println("Returned String: " + Str2);

      Str2 = Str2.copyValueOf( Str1, 2, 6 );
      System.out.println("Returned String: " + Str2);
   }
}

خروجی اجرای کد بالا به شکل زیر خواهد بود:

Returned String: hello world
Returned String: llo wo

همان گونه که دیده می شوددر قسمت اول کد ما کل آرایه را به رشته تبدیل کردیم ولی در بخش دوم گفته ایم که از اندیس شماره 2 به اندازه 6 خانه انتخاب کن که خروجی را مشاهده می کنید.

متد endsWith

این متد یک آرگومان ورودی دارد که مشخص می کند که انتهای رشته با آرگومان ورودی یکی است یا خیر. اگر قسمت انتهایی رشته با آرگومان ورودی یکی بود پس مقدار true و در غیر این صورت مقدار false برمی گرداند. اگر آرگومان ورودی رشته خالی باشد یا با رشته صدا زننده هم برابر باشد این متد جواب true خواهد داد. کد زیر مثالی از این متد را نمایش می دهد.

public class Test{

   public static void main(String args[]){
      String Str = new String("This is really not immutable!!");
      boolean retVal;

      retVal = Str.endsWith( "immutable!!" );
      System.out.println("Returned Value = " + retVal );

      retVal = Str.endsWith( "immu" );
      System.out.println("Returned Value = " + retVal );
   }
}

اگر کد بالا را اجرا کنیم نتیجه به صورت زیر خواهد بود:

Returned Value = true
Returned Value = false

متد equals

وظیفه این متد مقایسه است. به شکلی که رشته داده شده را با آرگومان ورودی مقایسه می کند. زبان برنامه نویسی جاوا برای هرشئ از هر نوعی می توان یک hashcode تولید کند. حال متد equals اگر مقدار hashcode دو شئ با هم برابر باشد آن دو را با هم برابر در نظر می گیرد و مقدار true را برمی گرداند وو در غیر این صورت مقدار false برمی گرداند. به عبارت دیگر اگر دو رشته با هم برابر باشند این متد مقدار true و اگر برابر نباشند این متد مقدار False برمی گرداند. آرگومان ورودی این متد می تواند هر شئی باشد. و مقدار بازگشتی آن یک مقدار Boolean است. برای مثال به کد زیر توجه کنید:

public class Test {

   public static void main(String args[]) {
      String Str1 = new String("This is really not immutable!!");
      String Str2 = Str1;
      String Str3 = new String("This is really not immutable!!");
      boolean retVal;

      retVal = Str1.equals( Str2 );
      System.out.println("Returned Value = " + retVal );

      retVal = Str1.equals( Str3 );
      System.out.println("Returned Value = " + retVal );
   }
}

اگر این کد را اجرا کنیم نتیجه آن به شکل زیر خواهدبود

Returned Value = true
Returned Value = true

متد مشابه دیگری نیز وجود دارد که equalsIgnoreCase نام دارد. این متد نیز عمل مقایسه را انجام داده و مشخص می کند که مقدار آرگومان ورودی با رشته مورد نظر برابر است یا خیر اما دو تفاوت بین این متد و متد equals وجود دارد یکی این که آرگومان ورودی باید از نوع String باشد و نمی تواند هر شئی باشد و دوم این که این متد بین حروف و بزرگ و کوچک تفاوت قایل نمی شود. مثالی از این متد در کد زیر آورده شده است.

public class Test {

   public static void main(String args[]) {
      String Str1 = new String("This is really not immutable!!");
      String Str2 = Str1;
      String Str3 = new String("This is really not immutable!!");
      String Str4 = new String("This IS REALLY NOT IMMUTABLE!!");
      boolean retVal;

      retVal = Str1.equals( Str2 );
      System.out.println("Returned Value = " + retVal );

      retVal = Str1.equals( Str3 );
      System.out.println("Returned Value = " + retVal );

      retVal = Str1.equalsIgnoreCase( Str4 );
      System.out.println("Returned Value = " + retVal );
   }
}

خروجی اجرای کد بالا به شکل زیر خواهد بود:

Returned Value = true
Returned Value = true
Returned Value = true

متد getBytes

این متد دو شکل گوناگون دارد. شکل اول از این متد به آرگومانی ندارد و شکل دوم آن یک آرگومان ورودی دارد. کار این متد این است که رشته را به یک سری بایت ها کدگذاری می کند. خروجی این متد آرایه ای از بایت ها می باشد. برای مثال به کد زیر توجه کنید:

import java.io.*;

public class Test{

   public static void main(String args[]){
      String Str1 = new String("Welcome to Tutorialspoint.com");

      try{
         byte[] Str2 = Str1.getBytes();
         System.out.println("Returned  Value " + Str2 );

         Str2 = Str1.getBytes( "UTF-8" );
         System.out.println("Returned  Value " + Str2 );

         Str2 = Str1.getBytes( "ISO-8859-1" );
         System.out.println("Returned  Value " + Str2 );
      }catch( UnsupportedEncodingException e){
         System.out.println("Unsupported character set");
      }
   }
}

خروجی کد گفته شده به شکل زیر خواهد بود

Returned  Value [B@192d342
Returned  Value [B@15ff48b
Returned  Value [B@1b90b39

متد getChars

این متد کاراکتر های رشته را به داخل یک آرایه از کاراکتر ها میریزد. به شکلی می توان گفت که کاراکترهای رشته را جدا می کند. این متد هیچ مقدار بازگشتی ندارد. ولی آرایه ی کاراکترهایی که باید پر شود را به شکل آرگومان ورودی باید به آن داد. آرگومان های ورودی این متد به ترتیب به شکل زیر می باشند:

  1. srcBegin: اندیس اولین کاراکتر از رشته مورد نظر که انتخاب کاراکتر ها از آن اندیس شروع می شوند. این آرگومان عددی است.
  2. srcEnd اندیس آخرین کاراکتر از رشته که انتخاب کاراکترها تا آن اندیس ادامه می یابد و در آن اندیس ختم می شود این آرگومان عددی است.
  3. dst نام آرایه مقصد را که کاراکتر ها در آن ریخته می شود را در این قسمت قرار می دهیم.
  4. dstBegin این آرگومان مشخص می کند که از کدام اندیس ارایه مقصد شروع به ریختن کاراکتر ها کنیم.

برای مثالی از این متد به کد زیر توجه کنید:

import java.io.*;

public class Test{
   public static void main(String args[]){
      String Str1 = new String("Welcome to Itpro.ir");
      char[] Str2 = new char[7];

      try{
         Str1.getChars(2, 9, Str2, 0);
         System.out.print("Copied Value = " );
         System.out.println(Str2 );

      }catch( Exception ex){
         System.out.println("Raised exception...");
      }
   }
}

خروجی کد بالا به شکل زیر خواهد بود:

Copied Value = lcome t

متد hashCode

این متد یک کد به ازای برای رشته تولید می کند که به آن hashCode گفته می شود. این hashCode برای اشیا Stringی به شکل زیر محاسبه می شود:

s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]

در فرمول بالا s[i] کاراکترهای رشته می باشد، n طول رشته می باشد و ^ علامت توان می باشد. مقدار hashCode برای رشته خالی صفر است. این متد هیچ آرگومان ورودی ندارد. خروجی این متد یک عدد int می باشد. مثالی از این متد در کد زیر آورده شده است:

import java.io.*;

public class Test{
   public static void main(String args[]){
      String Str = new String("Welcome to Tutorialspoint.com");
      System.out.println("Hashcode for Str :" + Str.hashCode() );
   }
}

خروجی اجرای کد بالا به شکل زیر است:

Hashcode for Str :1186874997

متد indexOf

این متد دارای 4 شکل مختلف می باشد. وظیفه این متد جستجو در داخل رشته و پیدا کردن محل آن است. خروجی این متد یک عدد int می باشد که محل شروع رشته یا کاراکتر می باشد. این متد می تواند یک کاراکتر یا یک رشته را در داخل رشته اصلی جستجو کند. اگر کاراکتر یا رشته مورد جستجو در رشته اصلی وجود نداشته باشد مقدار -1 بازگشت داده می شود. اشکال مختلف این متد عبارتست از:

  1. indexOf(int ch) یک کاراکتر را جستجو کرده و اندیس آن را برمی گرداند.
  2. indexOf(int ch, int fromIndex) یک کاراکتر را از اندیس مشخص شده جستجو می کند.
  3. indexOf(String str) یک رشته را در داخل رشته اصلی جستجو می کند و سپس نقطه شروع آن را برمی گرداند.
  4. indexOf(String str, int fromIndex) یک رشته را در داخل رشته اصلی از اندیس مشخص شده جستجو می کند و محل آن را برمی گرداند.

مثال این متد در کد زیر آورده شده است:

import java.io.*;

public class Test {

   public static void main(String args[]) {
      String Str = new String("Welcome to Itpro.ir");
      String SubStr1 = new String("Itpro");
      String SubStr2 = new String("Sutorials");

      System.out.print("Found Index :" );
      System.out.println(Str.indexOf( 'o' ));
      System.out.print("Found Index :" );
      System.out.println(Str.indexOf( 'o', 5 ));
      System.out.print("Found Index :" );
      System.out.println( Str.indexOf( SubStr1 ));
      System.out.print("Found Index :" );
      System.out.println( Str.indexOf( SubStr1, 15 ));
      System.out.print("Found Index :" );
      System.out.println(Str.indexOf( SubStr2 ));
   }
}

خروجی کد بالا به شکل زیر خواهد بود:

Found Index :4
Found Index :9
Found Index :11
Found Index :-1
Found Index :-1

به دلیل اهمیت متدهای کلاس String در این مطلب به ادامه متدهای کلاس String پرداخته شد. در مطالب آینده نیز به توضیح ادامه متدها می پردازیم.Itpro باشید

نویسنده: مهدی عادلی فر

منبع: جزیره برنامه نویسی و توسعه نرم افزار وب سایت توسینسو

هرگونه نشر و کپی برداری بدون ذکر منبع و نام نویسنده دارای اشکال اخلاقی می باشد.

نظر شما
برای ارسال نظر باید وارد شوید.
0 نظر

هیچ نظری ارسال نشده است! اولین نظر برای این مطلب را شما ارسال کنید...