سلام. دوست من امروز قصد داریم یکی دیگر از متدهای موجود در کلاس 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) در لینک زیر دانلود کنید:
این جلسه آموزشی را بصورت کامل و مرتب شده در لینک زیر دانلود کنید:(در صورت خرابی لینک گزارش دهید)