آموزش برنامه نویسی جاوا
آموزش برنامه نویسی جاوا (بخش سیزدهم: آموزش متد Substring در جاوا)
در بخش قبلی متدهایی را از کلاس String بررسی کردیم. در این بخش می خواهیم متدی دیگر به نام Substring را معرفی کنیم و با نحوه کار آن آشنا شیم. این متد به شما اجازه می دهد تا یک متن را از متن دیگر جدا سازید. ( یک رشته String از رشته String دیگر)
به عنوان مثال می توان یک آدرس ایمیل که به صورت رشته است را گرفته و بررسی کرد که آیا yahoo.com@ در آخر آن هست یا خیر.
برای اولین مثال ما کد زیر را تعریف میکنیم. کد زیر یک رشته به نام myString1 با مقدار “Gsm Developers” را تعریف کرده و سپس با استفاده از Substring کاری می کنیم که از کاراکتر اول تا سوم را جدا کرده و داخل متغیر myString2 بریزد.
String myString1 = "Gsm Developers"; String myString2 = myString1.substring(0, 3); System.out.print(myString2);
خروجی کد بالا برابر “Gsm” خواهد بود.
مثال بعدی یک مقدار آرگومان ورودی را در متد substring می گیرد:
String myString1 = "Gsm Developers"; String myString2 = myString1.substring(3); System.out.print(myString2);
خروجی بالا برابر با مقدار “Developers ” خواهد بود. زیرا سه کاراکتر اول یعنی “Gsm” را از رشته جدا کردیم. همچنین Space نیز در خروجی به عنوان کاراکتر چهارم وجود دارد که اگر میخواستیم آن را نیز حذف کنیم باید مقدار 4 را در آرگومان ورودی متد substring قرار می دادیم:
String myString2 = myString1.substring(4);
در مثال بعدی می خواهیم کاری کنیم که رشته “rs” از “Gsm Developers” جدا شود. پس یعنی کاراکتر 13ام به بعد یعنی “rs” را می خواهیم جدا کنیم. در واقع از کاراکتر 12 شروع کرده و دو کاراکتر بعدی را جدا می کنیم.
کد زیر را در ابتدا اجرا می کنیم:
String myString1 = "Gsm Developers"; String myString2 = myString1.substring(12,2); System.out.print(myString2);
اگر کد بالا را اجرا کنید مشاهده می کنید که با خطا مواجه می شوید. زیرا متد substring در قسمت اول از آرگومان ورودی اش، به آخرین کاراکتر از قسمتی که می خواهیم حذف شود، اشاره کرده ( در اینجا کاراکتر 12ام یعنی: e) و سپس تا آخرین کاراکتری که می خواهیم جدا شود به جلو حرکت می کند.
این خطا به این خاطر است که دومین عدد بین پرانتزهای substring به معنای تعداد کاراکترهایی که می خواهید بگیرید نیست، بلکه به معنای موقعیت نهایی در رشته می باشد. با مشخص کردن 2، به جاوا می گوییم که در کاراکتری در موقعیت 2 از رشته به اتمام برسد. از آنجایی که نمی توانید از موقعیت 12 به عقب بازگشته و به موقعیت 2 بروید، خطایی دریافت می کنید.
در تصحیح کد بالا، کد زیر را می نویسیم:
String myString1 = "Gsm Developers"; String myString2 = myString1.substring(12,14); System.out.print(myString2);
نتیجه برابر مقدار “rs” خواهد شد.
نکته : در کد بالا دیدید که ما کاراکتر 12 را در آرگومان ورودی متد substring وارد نمودیم. ولی موقعیت کاراکتر ‘r’ در قسمت 13 بود. پس همیشه در ورودی به کاراکتر قبل از کاراکتری که می خواهیم جدا شود، اشاره کنیم.
اگر بخواید کلمه Developers را از رشته “Gsm Developers” جدا کنید، آیا کد می توان در ورودی متد substring دو عدد 4 و 14 را قرار داد؟ جواب درست است ولی بهینه نیست. آیا باید 14 کاراکتر شمارش کنید؟ اگر جمله طولانی در رشته نوشته شده بود و ما فقط می خواستیم قسمت اول از رشته را حذف کنیم آیا باید تمام کاراکترها را شمارش می کردیم؟ پس راه حل چیست؟
در قسمت قبل دیدید که با متد ()length می توانستیم طول یک رشته را به دست آوریم. پس به جای شمارش 14 کاراکتر طول رشته را به دست می آوریم و به عنوان پارامتر دوم آرگومان ورودی متد substring قرار می دهیم:
String myString1 = "Gsm Developers"; String myString2 = myString1.substring(4,myString1.length()); System.out.print(myString2);
خروجی بالا مقدار “Developers” را به ما می دهد.
در مثال بعدی، می خواهیم از جایی که کاراکتر Space شمارش می شود، از بقیه رشته جدا شود. ولی نمی خواهیم کاراکترها را بشماریم پس چه کار کنیم؟
در بخش قبل دیدید که با استفاده از متد ()indexOf می توانستیم، محل یک کاراکتر را در رشته به صورت عدد صحیح int به دست آوریم. پس کافیست که محل کاراکتر خالی یا همان ‘ ‘ را به دست آورده و در ورودی متد substring قرار دهیم:
String myString1 = "GsmDevelopers yek site ast"; int pos = myString1.indexOf(' '); String myString2 = myString1.substring(pos+1); System.out.print(myString2);