به نظر من طولانی شدن کد زیاد هم مهم نیست. به نظرم اولویت با اینهاست :
1- برنامت در تمام شرایط درست کار کنه ( به عبارتی باگ نداشته باشه )
2- برنامت در زمان کمتری اجرا بشه
3- حافظه کمتری مصرف کنه
4- کد کمتر
برای برنامه های ساده زیاد نگران زمان، حافظه و کد نباش، مهم اینه درست کار کنه.
خب این کاری که شما میخواهید انجام بدید خیلی راحت با همون تابعی که نوشتم قابل انجامه. شما میگید نمیشه indexOf اینکار رو بکنه؟ خب اینکار رو نمیکنه، پس هیچ؟ خودت میتونی یه تابع بنویسی. کد شما یه اشکالاتی داره و اگر تصحیحش کنید باز به اون کدی که من نوشتم میرسید. دیگه بهینه تر فکر نمیکنم بشه انجام داد ( مگر اینکه بیایید خودتون به جای indexOf یه تابع بنویسید، که نیازی نیست گرچه سادست. راستی اکثر کتابخونه های جاوا ( شاید هم همشون کد منبع باز هستند و راحت میتونید ببینید با چی نوشته شده. کافیه در نت بینز Ctrl رو نگه دارید و روی indexOf کلیک کنید تا به منبعش برید. اونجا هم دوباره رو indexOf کلیک کنید تا به منبعش برسید و کدش رو ببینید )
راستی تو پرانتز بگم یکم کدت مشکلات syntax هم داره که اگه با نت بینز یا اکلیپس بنویسی خودش بهت هشدار میده.
اما در مورد این مثال. من از اون تابعی که قبلا نوشتم ( اینجا ) استفاده میکنم و کار شما رو اینجوری انجام میدم :
public static void main(String[] args) {
String arr[]={"red","blue","15487","book"};
String exp= "aaaared15487//BlUeBlue4 #1 g h ali";
exp=exp.toLowerCase();
int x;
for (int i=0;i<arr.length;i++) {
x=find(arr[i].toLowerCase(),exp);
System.out.println("("+arr[i]+":"+x+")");
}
}
public static 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;
}
خروجی برنامه :
(red:1)
(blue:2)
(15487:1)
(book:0)
شرح کد :
آرایه و رشته و اینا که گفتی فرض میکنیم گرفته شده.خب اول من میام عبارت اصلی رو یه بار همه رو به حروف کوچک تبدیل میکنم که هر بار نیاز نباشه.
بعد برای تک تک عناصر آرایه arr تابع find ( که تعداد کلمات ظاهر شده در عبارت رو برمیگردونه ) رو فراخوانی میکنه و جواب ها رو چاپ میکنه.
تابع find هم که تو لینکی که دادم توضیح دادم.
تو برنامه نویسی هیچ وقت یه روش و یه راه حل نیست. مثلا اینی که من گفتم شاید یکی بیاد از کتابخونه های آماده استفاده کنه ولی این معمولا چیزی است که تو دروس ازتون میخوان. اگر کلمه های مستقل مورد نظر بود، میتونستید از Map هم استفاده کنید. به این صورت که اول رشته عبارتتون رو با split اونا رو کلمه کلمه کنید و Map ای از کلمات و تعداد تکرارشون به دست بیارید. به هر حال میگم راه حل ها زیاده!
موفق باشید.