سلام با آموزش جاوا JAVA در خدمت شما عزیزان هستم
در قسمت قبل از آموزش تصویری برنامه نویسی جاوا با آرایه ها Array Lists در جاوا آشنا شدیم
حال با ادامه آموزش جاوا همراه باشید:
در مورد رشته های جاوا موارد بیشتری از آنچه با چشم دیده می شود وجود دارد. بر خلاف متغیرهای int یا متغیرهای double، رشته ها آبجکت می باشند. و این در عمل به این معناست که با رشته های متن کارهایی می توانید انجام دهید که با متغیرهای double یا int نمی توانید انجام دهید. ( همین مورد برای انواع داده ی boolean، byte، single، char، float، long و short نیز به کار می رود: آنها مانند رشته ها آبجکت نیستند)
قبل از اجرای رشته های متن، در اینجا اطلاعات اصلی مربوط به رشته ها را مشاهده خواهید کرد.
چگونگی ذخیره ی رشته ها در جاوا
یک رشته مجموعه ای از کاراکترهای Unicode می باشد که تحت عنوان نام یک متغیر حفظ می شوند. رشته ی زیر را در نظر بگیرید.
String someText = "Bill"
این خط به جاوا می گوید که یک رشته آبجکت با چهار کاراکتر "B"، "i"، "l"و یک "l" دیگر برقرار کند. در مجموعه کاراکتر Unicode، این مقادیر عبارتند از: \u0042، \u0069، \u006c،\u006c . مقادیر Unicode به عنوان اعداد هگزادسیمال ذخیره می شوند. حروف بزرگ ( A تا Z) با استفاده از مقادیر \u0041 تا \u005a ذخیره می شوند، در حالیکه حروف کوچک ( a تا z ) با استفاده از مقادیر هگزادسیمال \u0061 تا \u007a ذخیره می شوند.
در بخش قبل یک array وجود داشت که رشته های متن را حفظ می کرد. سپس array را مرتب سازی کردیم.
وقتی که برنامه اجرا می شود، خروجی مانند تصویر زیر می باشد.
قبلا ذکر کردیم که لغت "This" در ابتدا قرار می گیرد. اگر قرار است array به ترتیب حروف الفبا مرتب شود، انتظار می رود که لغت "a" در ابتدا قرار بگیرد. این به این خاطر است که لغت "a" با حرف کوچک دارای مقدار هگزادسیمال u\0061 می باشد، که عدد دهدهی 97 می باشد. اما حرف بزرگ "T" دارای یک مقدار هگزادسیمال u\0054 می باشد که عدد دهدهی 84 است. 84 کمتر از 97 می باشد، بنابراین "T" در ابتدا قرار می گیرد.
بسیار خود، اجازه بدهید در موزد اجرای رشته های متن کارهایی انجام دهیم. رشته متدهایی که مورد بررسی قرار خواهیم داد، عبارتند از
toUpperCasse toLowerCase compareTo IndexOf endWith, startsWith Substring Equals charAt trim valueOf
متدهای اول در بالا متدهای آسانی می باشند، که به حروف بزرگ و کوچک تبدیل می شوند. در بخش بعد در مورد آنها فرا خواهید گرفت.
تبدیل رشته های خود به حروف بزرگ و کوچک کار آسانی می باشد: تنها از متودهای داخلی toUpperCase و toLowerCase استفاده کنید.
برای این کار یک پروژه ی جدید را شروع کرده و کد زیر را به آن اضافه کنید:
دو خط اول از کد یک متغیر String برای حفظ متن "text to change" تنظیم می کنند و سپس آن را چاپ می کنیم. خط سوم یک متغیر دوم String به نام نتیجه را تنظیم می کند. و خط چهارم می باشد که در آن تبدیل را انجام می دهیم:
result = changeCase.toUpperCase( );
برای استفاده از یک متود string ابتدا رشته ی مورد نظر را تایپ کنید. برای ما این رشته در متغیر changeCase نامیده می شود. پس از نام متغیر یک نقطه تایپ کنید، سپس لیستی از متودهای موجود را مشاهده می کنید که می توانید در رشته ی خود از آنها استفاده کنید. toUpperCase را انتخاب کنید. ( متود پس از آن نیاز به پرانتز دارد.)
پس از اینکه جاوا لغت را به حروف بزرگ تغییر داده است، ما رشته ی جدید را به متغیر نتیجه ی خود مرتب می کنیم.
وقتی برنامه اجرا می شود، پنجره ی Output نتیجه ی زیر را نمایش خواهد داد:
اما شما مجبور نیستید که لغت تغییر یافته را در یک متغیر جدید ذخیره کنید. این کار نیز انجام می شود:
System.out.println( changeCase.toUpperCase( ) );
در اینجا جاوا تنها با تغییر رشته و بدون نیاز به اختصاص دادن نتیجه به یک متغیر جدید، به کار خود ادامه خواهد داد.
در عوض اگر می خواهید فقط به حروف کوچک تغییر دهید، از متود toLowerCase استفاده کنید. این متود درست به روش متود toUpperCase استفاده می شود.
در بخش بعدی چگونگی مقایسه ی رشته ها را در جاوا مشاهده خواهید کرد.
شما می توانید یک متود را با متود دیگر مقایسه کنید. ( در هنگام مقایسه جاوا از مقادیر هگزادسیمال به جای خود حروف استفاده خواهد کرد.). به عنوان مثال اگر بخواهید لغت "Ape" را با لغت "App" مقایسه کنید تا ببینید کدامیک نخست قرار می گیرد، می توانید از یک رشته متود داخلی به نام compareTo استفاده کنید. اجازه بدهید چگونگی کار آن را بررسی کنیم.
برای این کار نیازی به شروع یک پروژه ی جدید ندارید: به راحتی روی کدی که دارید کامنت بگذارید یا آن را حذف کنید. اکنون کد زیر را به آن اضافه کنید:
ما دو رشته متغیر تنظیم کرده ایم که حاوی لغا ت "Ape" و "App" می باشند. متود compareTo در کد بالا خط زیر می باشد:
result = Word1.compareTo( Word2 );
متود compareTo یک مقدار را گزارش می دهد. مقدار گزارش شده یا کمتر از 0 یا بیشتر از 0 و یا مساوی 0 می باشد. اگر Word1 قبل از Word2 قرار بگیرد، مقدار گزارش شده کمتر از 0 خواهد بود. اگر Word1 بعد از Word2 قرار بگیرد، مقدار گزارش شده بزگتر از 0 خواهد بود. اگر هر دو لغت یکشان باشند، مقدار 0 گزارش خواهد شد.
بنابراین لازم است کقداری را اختصاص دهید که compareTo به یک متغیر بازمی گرداند. ما مقدار را در یک متغیر صحیح به نام نتیجه قرار می دهیم. عبارات IF در کد به سادگی تست می کنند تا مورد را در متغیر نتیجه مشاهده کنند.
به هرحال وقتی یک رشته از متن را با رشته ای دیگر مقایسه می کنید، جاوا به جای حروف واقعی، مقادیر هگزادسیمال تاکید شده را مقایسه می کند. از آنجایی که حروف بزرگ دارای مقدار هگزادسیمال کمتری نسبت به حروف کوچک هستند، حرف بزرگ A در App قبل از حرف کوچ a در ape قرار خواهد گرفت. می توانید این مورد را امتحان کنید. در کد خود "Ape" را به "ape" تغییر دهید. خروجی "Word1 is more than Word2" خواهد بود، به این معنا که از لحاظ الفبایی جاوا لغت ape را بعد از app قرار خواهد داد.
برای حل مشکل یک متود مرتبط به نام compareToIgnoreCase وجود دارد. همانطور که از نام آن پیداست حروف بزرگ و کوچک نادیده گرفته می شوند. با استفاده از این متود از لحاظ الفبایی لغت ape قبل از App قرار خواهد گرفت.
متد indexOf برای قرار دادن یک کاراکتر یا یک رشته در داخل یک رشته ی دیگر استفاده می شود. به عنوان مثال می توانید از آن برای بررسی وجود کاراکتر @ در یک آدرس ایمیل استفاده کنید. اجازه بدهید از این مثال در کد استفاده کنیم.
مجددا می توانید روی کد خود کامنت بگذارید یا آن را حذف کنید. اما کد جدیدی برای امتحان کردن وجود دارد:
میخواهیم وجود نماد @ را در آدرس ایمیل بررسی کنیم، بنابراین ابتدا یک متغیر char تنظیم کرده و به آن مقدار '@' اختصاص می دهیم. ( به نماد علامت نقل قول متغیر char دقت داشته باشید.). پس از تنظیم یک آدرس ایمیل، یک متغیر نتیجه داریم، این یک متغیر int می باشد. دلیل این که نتیجه یک عدد صحیح می باشد این است که متود indexOf یک مقدار گزارش خواهد داد. این مقدار عدد مربوط به موقعیت کاراکتر علامت را در رشته ی آدرس ایمیل باز خواهد گرداند. در اینجا خط مربوطه را مشاهده می کنید:
result = email_address.indexOf( ampersand );
رشته ای که در حال جستجوی آن هستید در ابتدا قرار می گیرد. پس از یک نقطه، indexOf را تایپ کنید. بین پرانتزهای indexOf گزینه های زیادی دارید: یکی از این گزینه ها تایپ کردن یک کاراکتر مجزا ( یا نام متغیر char) می باشد. ما متغیر علامت خود را (ampersand) بین پرانتزهای indexOf قرار داده ایم. جاوا موقعیت کاراکتر @ را در آدرس ایمیل به ما خواهد گفت. این مقدار را در متغیر نتیجه ذخیره خواهد کرد.
وقتی کد را اجرا می کنید خروجی 4 خواهد بود. ممکن است تصور کنید که علامت @ پنجمین کاراکتر در آدرس ایمیل می باشد، اما indexOf شمارش را از 0 شروع می کند.
به هرحال اگر کاراکتر در لغتی که آن را جستجو می کنید وجود نداشته باشد، indexOf مقدار 1- را گزارش می دهد. برای امتحان این مورد نماد @ را از آدرس ایمیل خود حذف کنید. سپس مجددا کد خود را اجرا کنید که 1- را به عنوان خروجی مشاهده خواهید کرد.
می توانید از مقدار گزارش شده ی 1- به نفع خود استفاده کنید. در اینجا مجددا کدی را مشاهده می کنید با یک عبارت IF که مقدار متغیر نتیجه را امتحان می کند:
بنابراین اگر نتیجه ی indexOf عدد 1- باشد، می توانیم به یوزر اجازه ی ادامه ی کار بدهیم.
می توانید از indexOf برای تست کردن بیشتر از یک کاراکتر استفاده کنید. کد زیر آدرس ایمیل را چک می کند اگر با ".com" تمام می شود:
کد تقریبا یکسان می باشد، به جز اینکه اکنون در حال استفاده از متغیر String برای حفظ متنی هستیم که می خواهیم برای وجود (.com) و نه متغیر char آن را بررسی کنیم.
اگر متنی که در جستجوی آن هستیم در string که قبل از نقطه ی مربوط به indexOf یافت نشد، مجددا نتیجه ی 1- گزارش داده خواهد شد. در غیر این صورت indexOf موقعیت اولین کاراکتر هماهنگ سازی را گزارش خواهد داد. در کد فوق وقتی شمارش را از 0 شروع می کنید، نقطه هفتمین کاراکتر در آدرس ایمیل می باشد.
می توانید یک موقعیت شروع نیز برای جستجوهای خود تعیین کنید. در مثال آدرس ایمیل می توانیم جستجو برای ".com" را پس از نماد @ آغاز کنیم. در اینجا کدی را می بینید که موقعیت نماد @ را تعیین می کند و سپس از آن به عنوان موقعیت آغازین برای جستجوی ".com" استفاده می کند.
خط زیر در واقع خط جدید کد می باشد:
result = email_address.indexOf( dotCom, atPos );
تنها تفاوت افزودن یک متغیر اضاقه بین پرانتزهای indexOf می باشد. ما هنوز رشته ای داریم که در جستجوی آن هستیم ( که متنی است که در متغیر dotcom قرار می گیرد)، اما اکنون یک موقعیت ابتدایی برای جستجو داریم. این موقعیت مقدار متغیری به نام atPos می باشد. مقدار atPos با استفاده از indexOf برای تعیین موقعیت نماد @ در آدرس ایمیل به دست می آید. بنابراین جاوا به جای شروع از 0، جستجو را از این موقعیت آغاز خواهد کرد که پیش فرض می باشد.
Ends With … Starts With
برای برنامه ی فوق می توانید از متود داخلی endsWith استفاده کنید:
Boolean ending = email_address.endsWith( dotcom );
لازم است یک متغیر Boolean برای endsWith تنظیم کنید، زیرا متود پاسخ true یا false را گزارش خواهد داد. رشته ای که سعی در تست کردن آن دارید، بین پرانتزهای endsWith قرار می گیرد و متنی که در جستجوی آن هستید قبل از آن می آید. اگر متن در جستجوی رشته باشد، یک مقدار true گزارش داده می شود، در غیر اینصورت false خواهد بود. برای بررسی مقدار می توانید یک عبارت if … else اضافه کنید:
System.out.println( "Invalid Email Address" );
}
else {
System.out.println( "Email Address OK " );
}
if (ending == false ) {
متود startsWith به روشی مشابه استفاده می شود.
Boolean startVal = email_address.startsWith( dotcom );
مجددا مقدار گزارش شده یک مقدار true یا false از Boolean می باشد.
در بخش بعدی چگونگی استفاده از متودی به نام substring را فرا خواهید گرفت.