View Full Version : سوال: جستجو در رشته
mr_stone
جمعه 12 اردیبهشت 1393, 12:28 عصر
سلام دوستان
برای جستجو توی رشته از چه متد هایی میتونم استفاده کنم؟!؟
برای مثال
String word = "cat";
String txt = "cat is here";
boolean found = txt.contains(word);
میشه تشخیص داد که هست یا نه!!!
من میخوام بدونم با چی میشه یک رشته رو پیدا کزد و بر گردوند!
و با چی میشه یک رشته رو یدا کرد و شمارش کرد که مثلا چند تا از رشته Cat داریم!!!؟؟
vahid-p
جمعه 12 اردیبهشت 1393, 14:33 عصر
شما باید از متد indexOf استفاده کنید که محل وقوع کلمه رو از نوع int بهتون میده. بعد هم برای اینکه تعداد تکرارش رو پیدا کنید از متد های مختلف indexOf استفاده کنید. به این صورت :
String word = "cat";
String txt = "cat is here";
int index=-word.length();
int found=-1;
do{
found++;
index=txt.indexOf(word, index+word.length());
}while(index!=-1);
System.out.println(found);
البته میتونستید تابع بازگشتی هم بنویسید، ولی خب همینجوریش هم سادست. فقط مطمئن باشید این کد رو دقیق دقیق فهمیدید بعد ازش استفاده کنید. مثلا چرا do...while استفاده شده؟ اگر while(index!=-1( بود چه مشکلی ممکن بود پیش بیاد؟ برای راهنمایی فرض کنید رشته ی word یک حرفی بود. ضمنا چرا index=-word.length() قرار گرفته ( توجه کنید به indexOf(word, index+word.length( )
موفق باشید
vahid-p
جمعه 12 اردیبهشت 1393, 14:44 عصر
یک نکته رو اضافه کنم اونم اینکه حتما میدونید مثلا اگه رشته txt این باشه : kasjgdkjsagdkjasgcatkalksdjalkdsjlacatakjsd
جواب 2 خواهد بود.
به هر حال هر چیزی ممکن برداشت های مختلفی ازش باشه، برای همین من این نکته رو گفتم که شاید منظورت مثل cat تو مثالت باشه که یک کلمه جداگانه باشه. برای اینکه کلمه مستقل در نظر گرفته بشه بهتره اینکار رو قبل از پیدا کردن انجام بدید :
word=" "+word+" ";
txt=" "+txt+" ";
موفق باشید.
mr_stone
جمعه 12 اردیبهشت 1393, 16:35 عصر
متشکررررررررررررررررررررر ررررم. :)
سایانا
شنبه 13 اردیبهشت 1393, 10:03 صبح
این که چرابه جای while ازdo-while استفاده شده معلومه چون به قول خودتون اگه کلمه یک حرفی باشه حلقه اجرا نمیشه. ولی این که چرا نوشتید (int index=-word.length();
) رو متوجه نشدم.
راستی راهی نیست که به جای خود کلمه متغییری که دارای اون هست رو استفاده کنیم؟
اگه تعداد مواردی که باید جست وجو شه زیاد باشه نوشتن این کد برای همش کار جالبی نیست!
vahid-p
شنبه 13 اردیبهشت 1393, 12:10 عصر
"معلومه چون به قول خودتون اگه کلمه یک حرفی باشه" :لبخند:
خب بعدیش هم به قول خودم میگفتید دیگه. در اصل مثلا راهنمایی کردم در حد جواب! اونجا که گفتم تو تابع indexOf(word, index+word.length( ).
خب شما ببینید تابع indexOf دو آرگومان داره. اولی که مشخصه، دومی indexfrom هست. یعنی از اینجای رشته شروع کن به جستجو. اگر index=0 باشه، محل شروعش میشه 0+word.length که از اول رشته سرچ نمیکنه. پس مقدار اولیه رو -word.length میذاریم تا وقتی با word.length جمع شد، بشه صفر. دیگه از صفر شروع میکنه. هر کلمه ای که پیدا کرد، به اندازه طول رشته میره جلو و از اونجا دنبال بعدیش میگرده.
راستی راهی نیست که به جای خود کلمه متغییری که دارای اون هست رو استفاده کنیم؟
اگه تعداد مواردی که باید جست وجو شه زیاد باشه نوشتن این کد برای همش کار جالبی نیست!
منظورتون رو دقیق نفهمیدم. من الان اومدم از همون متغیر استفاده کردم دیگه، خود کلمه رو که مستقیم ننوشتم. اگه منظورتون رو درست فهمیده باشم، خب میتونید به صورت یک متد یا همون تابع بنویسید هر وقت خواستید استفاده کنید. کلا بعید میدونم method منظورتون باشه، ولی خب برای محکم کاری :
public int find(String word,String expression){
int index=-word.length();
int found=-1;
do{
found++;
index=expression.indexOf(word, index+word.length());
}while(index!=-1);
return found;
}
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.