در این مقاله ی آموزشی، به بررسی دیگر متدهای String در جاوا می پردازیم و متدهایی را آموزش می دهیم که با استفاده از آنها می توانیم رشته ها را تغییر دهیم.
طیف گسترده ای از متدهای اضافی، در کلاس String در دسترس هستند. متدهای toUpperCase()
و toLowerCase()
هر رشته ای را به ترتیب به حروف بزرگ یا حروف کوچک تبدیل می کنند. بعنوان مثال، اگر یک رشته به صورت aWord = "something";
تعریف کنیم، آنگاه رشته ی "something" در حافظه ایجاد می شود و آدرس آن در aWord ذخیره می شود.
دستور aWord = aWord.toUpperCase()
باعث می شود رشته ی "SOMETHING" در حافظه ایجاد شود و آدرس آن در aWord قرار گیرد. چونکه اکنون aWord به "SOMETHING" اشاره می کند، دستور aWord = aWord.toLowerCase()
باعث می شود مقدار آن تغییر کند و aWord به "something" اشاره کند.
متد length()
طول یک رشته را برمی گرداند. بعنوان مثال، دستورات زیر منجر به این می شوند که متغیر len برابر با مقدار 5 شود:
String greeting = "Hello";
int len = greeting.length();
نکته: متدهایی که اطلاعاتی را در مورد یک آبجکت برمی گردانند، متدهای ارزش یاب(accessor) نامیده می شوند. متد length()
یک نمونه از یک متد ارزش یاب به شمار می رود.
نکته: وقتی که ما باید مشخص کنیم که آیا یک رشته خالی است یا نه، موثر تر است که طول آن را با 0 مقایسه کنیم، تا اینکه از متد equals()
استفاده کنیم.
متد indexOf()
مشخص می کند که آیا یک کاراکتر خاص در داخل یک رشته وجود دارد یا نه. اگر وجود داشت، این متد، موقعیت(اندیس) آن کاراکتر را برمی گرداند؛ اولین موقعیت یا اندیس یک رشته، 0 می باشد. اما اگر آن کاراکتر خاص، در داخل رشته وجود نداشت، مقدار 1- برگردانده می شود. بعنوان مثال، در رشته ی myName = "Stacy";
مقدار myName.indexOf('S')
صفر(0) می باشد و مقدار myName.indexOf('a')
برابر با 2 است. و مقدار myName.indexOf('q')
برابر با 1- است.
در آرگومان متد charAt()
باید یک عدد صحیح قرار گیرد، که موقعیت کاراکتری که این متد برمی گرداند را مشخص می کند. بعنوان مثال، اگر myName یک رشته باشد که به "Stacy" اشاره کند، مقدار دستور myName.charAt(0)
برابر با 'S' است و مقدار myName.charAt(1)
برابر با 't' است.
متد endsWith()
و متد startsWith()
هردو، یک آرگومان رشته-ای را دریافت می کنند؛ در متد اول، اگر یک آبجکت رشته ای، با آرگومان داده شده پایان یابد، مقدار true و در غیر این صورت مقدار false برگردانده می شود.و در متد دوم، اگر یک آبجکت رشته-ای، با آرگومان داده شده شروع شود، مقدار true و در غیر این صورت مقدار false برگردانده می شود. بعنوان مثال، اگر دستور String myName = "Stacy";
را داشته باشیم، آنگاه عبارت myName.startsWith("Sta")
مقدار true و عبارت myName.endsWith("z")
مقدار false را برمی گرداند.
متد replace()
به ما امکان می دهد تا تمام رخدادهای چند کاراکتر را در داخل یک رشته جایگزین کنیم. بعنوان مثال، اگر بنویسیم String yourName = "Annette"
سپس دستور String goofyName = yourName.replace('n', 'X');
را بنویسیم، باعث می شود مقدار "AXXette" در goofyName قرار گیرد.
با اینکه این بخشی از کلاس String نیست، اما استفاده از متد toString()
وقتی که با آبجکت های رشته کار می کنیم، مفید است. این متد، هر آبجکتی را به یک رشته(String) تبدیل می کند. این متد به طور خاص، وقتی که بخواهیم نوع های داده ی اولیه را به رشته ها تبدیل کنیم، مفید است. بنابراین، اگر ما theString و someInt = 4;
را به صورت زیر تعریف کنیم، آنگاه پس از اجرای دستورات زیر، theString به مقدار(رشته ی) "4" اشاره می کند:
String theString;
int someInt = 4;
theString = Integer.toString(someInt);
اگر یک رشته ی دیگر و یک مقدار double تعریف کنیم، آنگاه پس از دستورات زیر، aString به(رشته ی) "8.25" اشاره می کند:
String aString;
double someDouble = 8.25;
aString = Double.toString(someDouble);
ما همچنین می توانیم از روش الحاق کردن، برای تبدیل هر نوع اولیه ای به یک رشته استفاده کنیم. ما می توانیم یک متغیر ساده را به یک رشته متصل کنیم تا یک رشته ی طولانی تر با استفاده از عملگر + ایجاد شود. بعنوان مثال، اگر یک متغیر به صورت int myAge = 25;
تعریف کنیم، دستور زیر، باعث می شود که aString به رشته ی "My age is 25"
اشاره کند:
String aString = "My age is " + myAge;
به طور مشابه، اگر دستورات زیر را بنویسیم، آنگاه anotherString به رشته ی "12.34" اشاره می کند:
String anotherString;
float someFloat = 12.34f;
anotherString = "" + someFloat;
مفسر(interpreter) جاوا، در ابتدا عدد 12.34f که از نوع float است را به رشته ی "12.34" تبدیل می کند و آن را به یک رشته ی خالی(null) اضافه می کند.
نکته: متد toString()
از کلاس String سرچشمه نمی گیرد؛ این یک متد است که در جاوا اضافه شده است که می توانیم از آن در هر نوع آبجکتی استفاده کنیم. در فصل "مفاهیم پیشرفته ی وراثت" یاد می گیریم که چگونه از نسخه های این متد برای کلاس های خود استفاده کنیم و اینکه متد toString()
از کلاس Object سرچشمه می گیرد.
ما در سراسر این کتاب از متد toString()
استفاده می کنیم، بدون اینکه متوجه آن شویم. وقتی که ما از متدهای print()
و println()
استفاده می کنیم، آرگومان های آنها در صورت لزوم، به طور اتوماتیک به رشته تبدیل می شوند. نیازی نیست که برای استفاده از متد toString() از ایمپورت(import) استفاده کنیم، زیرا این متد بخشی از java.lang است و به طور اتوماتیک اضافه(ایمپورت) می شود.
چونکه متد toString()
که با متد println()
استفاده می شود، آرگومان هایی از هر نوع اولیه را دریافت می کند، که شامل int و double و غیره می شود، این یک مثال عملی از چندریختی(polymorphism) محسوب می شود.
از قبل می دانید که می توانیم با استفاده از یک علامت بعلاوه(+) رشته هایی را با دیگر رشته ها، یا مقایر، با یکدیگر الحاق کنیم. ما از این روش در متدهایی مانند println() و showMessageDialog() در فصل 1 استفاده کرده ایم. بعنوان مثال، ما می توانیم با استفاده از دستور زیر، یک نام و یک فاصله و یک فامیلی را نمایش دهیم:
System.out.println(firstName + " " + lastName);
علاوه بر این، ما می توانیم بخشی از یک رشته را با استفاده از متد substring()
استخراج کنیم و از آن به تنهایی استفاده کنیم یا آن را با یک رشته ی دیگر الحاق کنیم. متد substring()
دو آرگومان عددی صحیح(integer) را دریافت می کند. یک اندیس(موقعیت) شروع و یک اندیس پایان. هردوی این اندیس ها، به این نکته بستگی دارند که اندیس یا همان موقعیت اول در یک رشته، از 0 شروع می شود. طول این زیر رشته ی استخراج شده، برابر با اختلاف بین عدد صحیح دوم و عدد صحیح اول است.
اگر این متد را بدون عدد صحیح دوم بنویسید، زیررشته تا انتهای رشته ی اصلی ادامه می یابد. بعنوان مثال، اپلیکیشن درون تصویر 7.8 از کاربر درخواست می کند تا نام و نام خانوادگی خود را وارد کند. سپس این اپلیکیشن این نام ها را استخراج می کند؛ به طوری که با استفاده از آنها می توانیم یک نامه ی تجاری دوستانه ایجاد کنیم.
پس از اینکه این اپلیکیشن، از کاربر می خواهد تا یک نام را وارد کند، یک متغیر کنترل حلقه برابر با 0 قرار می گیرد. تا هنگامی که این متغیر کمتر از طول نام وارد شده باشد، هریک از کاراکترها با کاراکتر فاصله ی سفید(space) مورد مقایسه قرار می گیرد. وقتی که در این مقایسه، یک فاصله ی سفید(space) پیدا می شود، دو رشته ی جدید ایجاد می شوند.
اولین رشته، یعنی firstName برابر با یک substring در رشته ی ورودی، از 0 تا جایی که فاصله ی سفید پیدا شده است، می باشد. دومین رشته، یعنی familyName برابر با یک substring در رشته ی ورودی، از بعد از فاصله ی سفید، تا انتهای رشته می باشد.
هنگامی که نام و نام خانوادگی ایجاد شدند، متغیر کنترل حلقه، برابر با طول(length) رشته ی اصلی قرار می گیرد؛ و پس از اینکه از حلقه خارج شدیم، کار ادامه می یابد تا نامه ی دوستانه را نمایش دهیم. تصویر 7.9 صفحه ی ورودی داده و همچنین نامه ی دوستانه را نشان می دهد.
(تصویر 7.8 : اپلیکیشن BusinessLetter)
برای ساده تر کردن مثال، اپلیکیشن BusinessLetter در تصویر 7.8 نامه را تنها برای یک مشتری نمایش می دهد. یک اپلیکیشن تجاری واقعی، به احتمال زیاد به یک کارمند امکان می دهد تا ده ها یا حتی صدها نام مشتری را وارد کند و آنها را در یک فایلِ داده، برای استفاده در آینده ذخیره کند. در فصل "ورودی و خروجی فایل" یاد خواهید گرفت تا داده ها را به طور دائم در فایل ها ذخیره کنید. اکنون فقط تمرکز خود را روی قابلیت های به کار بردن رشته ها، در این اپلیکیشن بگذارید.
(تصویر 7.9 : اجرای نمونه ای از اپلیکیشن BusinessLetter در جاوا)
دو عبارت صحیح و یک عبارت اشتباه
موضوع: دیگر متدهای رشته در جاوا
- فرض کنید myName از نوع رشته(String) است که به صورت "molly" تعریف شده است. مقدار
myName.toUpperCase()
برابر با "Molly" است. - فرض کنید myName از نوع رشته(String) است که به صورت "molly" تعریف شده است. مقدار
myName.length()
برابر با 5 است. - فرض کنید myName از نوع رشته(String) است که به صورت "molly" تعریف شده است. مقدار
myName.indexOf('M')
برابر با 1- است.
پاسخ:
گزینه شماره 1 اشتباه است. اگر myName برابر با "molly" باشد، آنگاه myName.toUpperCase()
برابر با "MOLLY" است.