سلام. دوست من امروز قصد داریم یکی دیگر از متدهای موجود در کلاس String را با هم بررسی کنیم. متد ()split برای تقسیم یک String به زیر رشته های آن بر اساس جداکننده(de limit er) داده شده استفاده میشود.
به بیان ساده تر وقتی قصد داریم یک String را بر اساس یک علامت خاص قطعه قطعه یا تجزیه کنیم از این متد استفاده میکنیم.
نکته: اون علامت خاص که بر اساس آن یک String را به زیر رشتههای آن تقسیم میکنیم همون جداکننده(de limit er) ما است.
• با مثال متوجه خواهید شد.
برای مثال فرض کنید یک String به صورت زیر داشته باشیم:
String str ="r 2 5";
حالا قصد داریم رشته str را بر اساس فاصله بین زیر رشتههای آن، تجزیه کنیم.
نکته: منظور از فاصله بین زیررشتههای یک رشته همون space یا " " است.
در زیر فاصله بین زیررشتههای رشته "r 2 5" را با رنگ سبز نشان داده ایم:
همان طور که گفتیم قصد داریم رشته str را بر اساس علامت فاصله (" ") به زیر رشتههای آن تجزیه یا جدا کنیم. اگر رشته str را با استفاده از متد split و بر اساس علامت فاصله (" ") جدا کنیم، نتیجه سه رشته مجزا به صورت زیر خواهد بود:
• همان طور که مشاهده کردید ما رشته "r 2 5" را با استفاده از متد split و بر اساس علامت " " به سه زیر رشته آن تقسیم(جدا) کردیم. جلوتر مثال کدنویسی میزنیم بهتر درک خواهید کرد.
متد split دارای دو پارامتر مختلف است:
String[] split(String regex):
• این متد یک رشته را بر اساس یک علامت خاص به زیر رشتههای آن جدا میکند. به بیانی دیگر این متد زیر رشتههای یک String را بر اساس یک علامت خاص تکه تکه میکند و به صورت آرایه ای از String برمی گرداند.
• پارامتر regex نقش علامتی که بر اساس آن String مورد نظر را قطعه قطعه میکنیم، برعهده دارد.
• در مثال بالا ما رشته str را با استفاده از متد split به سه زیر رشته آن، بر اساس علامت فاصله یا " " تقسیم کرده و درون آرایه از نوع String ریخته ایم.
String str = "r 2 5";
• یک String تعریف کرده ایم که بین زیر رشتههای آن علامت فاصله است.
String array[] = str.split(" ");
• رشته str را بر اساس علامت " " یا فاصله به زیر رشتههای آن جدا کرده و درون آرایه از نوع String ریخته ایم. در هر خانه از آرایه رشته جدا شده از رشته str قرار گرفته است.
for (int i = 0; i < array.length; i++)
System.out.println("Separated string " + i + ": " + array[i]);
}
• حال رشتههای جدا شده ای که درون آرایه ما قرار گرفته اند را با دستور بالا چاپ کرده ایم.
متد دوم........
String[] split(String regex, int limit ):
• این متد نیز مانند متد قبل برای جدا کردن زیر رشتههای یک String بر اساس علامت خاص است. تنها تفاوت این متد با متد قبل این است که میتوانیم برای تعداد زیر رشتههای استخراج شده از یک رشته محدودیت ایجاد کنیم.
نکته: برای هر زیر رشته استخراج شده از یک رشته از اصطلاح token استفاده میکنیم.
مثلا اگر رشته "r 2 5" را بر اساس علامت " " تکه تکه کنیم، به هر زیر رشته آن یک token میگوییم. مثلا رشته"r" یک token رشته "2" یک token و رشته "5" یک token خواهد بود.
• حالا کاربرد متد String[] split(String regex, int limit ) چیست؟ با این متد میتوانیم تعداد token یا زیر رشتههای جدا شده از یک رشته را مشخص کنیم.
• پس متد split بر اساس regex، به تعداد limit، زیر رشتههای یک String را تکه تکه کرده و به صورت آرایه از نوع String برمی گرداند. با مثال بهتر متوجه میشوید.
Example:
package java like ;
public class Test9 {
public static void main(String[] args) {
String str = "Welcome-to-javapro.ir";
String array1[] = str.split("-");
System.out.println("");
System.out.println("Return Value :"); for (int i = 0; i < array1.length; i++)
System.out.println("Separated string " + i + ": " + array1[i]);
System.out.println("");
System.out.println("Return Value :");
String array2[] = str.split("-", 2);
for (int i = 0; i < array2.length; i++)
System.out.println("Separated string " + i + ": " + array2[i]);
}
}
خروجی(output):
Return Value :
Separated string 0: Welcome
Separated string 1: to
Separated string 2: javapro.ir
در مثال بالا ما زیر رشتههای رشته str را با دو متد مختلف split تکه تکه کردیم.
String array1[] = str.split("-");
• در این دستور با استفاده از متد split و بر اساس علامت "-" تمام زیر رشتههای (token های) رشته str را درون آرایه ای از نوع String ریخته ایم. در اینجا محدودیتی برای تعداد زیر رشتههای جدا شده رشته str ایجاد نکردیم. و خروجی زیر رشتههای استخراج شده رشته str به صورت زیر است:
• در دستور بالا ما گفتیم تنها حق داری دو زیر رشته یا token از رشته str را بر اساس علامت "-" جدا کنی. خروجی زیر رشتههای جدا شده از رشته str بر اساس دستور بالا به صورت زیر خواهد بود:
for (int i = 0; i < array2.length; i++)
System.out.println("Separated string " + i + ": " + array2[i]);
}
}
خروجی(output):
Separated string 0:
Separated string 1: a
Separated string 2: b
Separated string 3: c
Separated string 4: d
Separated string 5: e
Separated string 6: f
Example:
در مثال زیر از متد split(String regex, int limit ) استفاده کردیم. و مقدار پارامتر limit را صفر قرار داده ایم:
for (int i = 0; i < array2.length; i++)
System.out.println("Separated string " + i + ": " + array2[i]);
}
}
خروجی(output):
Separated string 0:
Separated string 1: a
Separated string 2: b
Separated string 3: c
Separated string 4: d
Separated string 5: e
Separated string 6: f
• همان طور که در خروجی دو مثال قبل مشاهده میکنید، هیچ تفاوتی بین خروجی ها وجود ندارد. به عبارت دیگر وقتی مقدار limit پارامتر موجود در متد split(String regex, int limit ) برابر صفر قرار میدهیم هیچ تفاوتی با دستور split(String regex) نمیکند.
• پس وقتی مقدار پارامتر limit متد split برابر صفر باشد همه زیر رشتههای یک رشته بدون محدودیت بر اساس علامت مورد نظر تکه تکه میشوند.
Example:
در مثال زیر از متد split(String regex, int limit ) استفاده کردیم. و مقدار پارامتر limit را یک عدد منفی قرار داده ایم:
for (int i = 0; i < array2.length; i++)
System.out.println("Separated string " + i + ": " + array2[i]);
}
}
خروجی(output):
Separated string 0:
Separated string 1: a
Separated string 2: b
Separated string 3: c
Separated string 4: d
Separated string 5: e
Separated string 6: f
Separated string 7:
• وقتی مقدار پارامتر limit متد split(String regex, int limit ) برابر یک عدد منفی باشد ( فرق نمیکنه چه عدد منفی باشد) ،سمت راست آخرین فضای خالی بعد علامتی که بر اساس آن یک رشته را تجزیه میکنیم نیز به عنوان یک زیر رشته یا token از رشته اصلی جدا میشود. اما در حالتی که limit برابر با صفر یا یک عدد مثبت بود آخرین فضای خالی بعد علامت جدا کننده نادیده گرفته میشد.
نتیجه گیری کلی:در متد split(String regex, int limit ):
1. وقتی limit برابر با صفر یا عدد مثبت باشد( limit >=0) آخرین فضای خالی بعد از علامت جدا کننده نادیده گرفته میشود:شکل(1)
• منظور از فضای خالی بعد از آخرین علامت جداکننده بخشی است که با فلش بهش اشاره شده است. خب بله حق دارید فضای خالی بعد از آخرین علامت "_" دیده نمیشود اما دیگه متد split با مقدر limit منفی اون فضا را در نظر میگیرد.
2. وقتی limit برابر یک عدد منفی باشد ( limit <0) فضای سفید بعد از آخرین علامت جداکننده به عنوان یک زیر رشته یا token در نظر گرفته میشود.
متد split با همه پارامترهای مختلف و مقدار limit های مثبت یا منفی یا صفر، اولین فضای سفید قبل از علامت جداکننده را درنظر میگیرند:شکل(2)
نکته مهم: اگر در یک رشته در کنار هم علامت جدا کننده تکراری داشته باشیم چه اتفاقی میافتد؟ به مثال زیر توجه کنید:
.....ادامه این جلسه آموزشی رو به صورت کتاب الکترونیکی (PDF) در لینک زیر دانلود کنید:
این جلسه آموزشی را بصورت کامل و مرتب شده در لینک زیر دانلود کنید:(در صورت خرابی لینک گزارش دهید)