خرداد ۱۳, ۱۳۹۸ Mostafa بدون دیدگاه

اگر دنبال برنامه نویس برای ساخت افزونه ،قالب،سایت،برنامه ویندوز،اپلیکیشین اندروید،ربات تلگرام و.... هستید ،سفارش برنامه نویسی را مطالعه نمایید.

توجه : درخواست افزونه ،قالب، اسکریپت و نرم افزار و ... و سوالات و مشکلات خود را در انجمن ارسال نمایید

در جاوا، String دنباله ای از کاراکترها (char value) است. آرایه ای از کاراکترها را نیز می توان یک رشته ی java در نظر گرفت و تقریبا عملکردی مشابه را ایفا می کند.

مثال :

char[] ch={'m','y','p','g','r'}; 
String s=new String(ch);

معادل دستور زیر می باشد :

String s="mypgr";

کلاس String در جاوا تعداد زیادی متد در اختیار توسعه دهنده می دهد که می توان با استفاده از آن عملیات مختلفی را بر روی متغیر از جنس string انجام داد. از جمله ی این متدها می توان به compare()، concat()، equals()، split()، length()، replace()، comapreTo()، intern()، substring() اشاره کرد.

کلاس java.lang.String می تواند اینترفیس های Serializable، Comparable و CharSequence را پیاده سازی (implement) کرده و متدهای تعریف شده در آن ها را فراخوانی کند.

پیاده سازی CharSequence

CharSequence یک interface یا الگوی پیاده سازی برای ساخت و نمایش دنباله ای از کاراکترها است. سه کلاس String، StringBuffer و StringBuilder این interface را پیاده سازی می کنند. در واقع در جاوا می توان به کمک این سه کلاس String تعریف کرد.

String در جاوا غیرقابل تغییر است که در اصطلاح به آن immutable گفته می شود. هر زمان که رشته ای را تغییر می دهید، در واقع یک نمونه ی جدید از این کلاس در حافظه ساخته می شود. برای استفاده از رشته هایی که قابل تغییر می باشند، می توانید از کلاس های StringBuffer و SringBuilder استفاده نمایید.

در زیر به شرح مفهوم String در جاوا و اینکه چگونه می توان از آن یک شی ساخت می پردازیم.
شرح String در Java

به طور کلی، string دنباله ای از کاراکترها است. اما در جاوا، string یک شی یا نمونه ی ساخته شده از روی یک کلاس است که توالی از کاراکترها را در خود جای می دهد. برای ساخت آّبجکت از جنس string بایستی از کلاس java.lang.String استفاده کرد.
شرح چگونگی و روش های مختلف ایجاد آبجکت String

می توانید به دو روش زیر یک آبجکت از جنس String ایجاد نمایید:

قرار دادن کاراکترهای موردنظر داخل دابل کوتیشن “”/روش string literal
با استفاده از کلیدواژه ی new

ساخت شی String به روش string literal

در این روش توسعه دهنده برای تعریف متغیر از جنس string، (پس از تعریف متغیری از جنس String) صرفا تعدادی کاراکتر را داخل “” درج می نماید.

 

مثال :

String s="welcome";

هر بار که توسعه دهنده یک متغیر string را به این روش ایجاد می کند، دستگاه مجازی جاوا (JVM) اول بررسی می کند، آیا این string literal از قبل در constant pool وجود دارد یا خیر. اگر string قبلا در constant pool موجود نباشد، یک نمونه ی جدید string ساخته شده و در pool قرار داده می شود (“constant pool” به مجموعه ای از بایت های فرمت دهی شده در یک class file اشاره دارد که برای class loader جاوا قابل فهم می باشد. “string های” داخل آن در واقع serialize شده هستند نه شی های جاوا و همچنین ثوابت از انواع مختلف نظیر int را در خود کپسوله می کند).

 

مثال :

String s1="Welcome";  
String s2="Welcome";//نمونه جدیدی ایجاد نمی کند

 

 

در مثال بالا، تنها یک شی از جنس string ساخته می شود. ابتدا JVM هیچ آبجکتی از جنس string که دارای مقدار “welcome” باشد در constant pool پیدا نمی کند و به همین خاطر یک آبجکت جدید ایجاد می نماید. پس از آن، آبجکتی از جنس string که حاوی مقدار “Welcome” می باشد را در pool یافته، اما این بار دوباره یک شی جدید از نوع یکسان ایجاد نمی کند، بلکه اشاره گری (reference) به همان نمونه را برمی گرداند.

 

نکته: شی های از جنس String در ناحیه ی خاصی از حافظه به نام string constant pool ذخیره و نگه داری می شوند.

 

چرا جاوا از مفهوم String literal استفاده می کند؟

در پاسخ باید گفت برای اینکه جاوا از میزان حافظه ی کمتری استفاده کند. به عبارت دیگر زمانی که شی از قبل ایجاد شده و در string constant pool جایگذاری شده باشد، آنگاه جاوا پس از یافتن آن دوباره همان شی را تولید نمی کند و حافظه ی اضافی اشغال نمی نماید.
ایجاد شی به وسیله ی کلیدواژه ی new

دستور تعریف شی جدید به وسیله ی کلیدواژه ی new :

String s=new String("Welcome");//creates two objects and one reference variable

زمانی که با کلیدواژه ی new شی سازی می شود، دستگاه مجازی جاوا (JVM) یک آبجکت جدید از جنس string در ناحیه ی غیر pool از حافظه ی heap ایجاد می نماید. سپس مقدار نوشتاری “Welcome” را در constant pool مربوط به string قرار می دهد. متغیر s به شی مقیم در ناحیه ی غیر pool (non pool) heap اشاره دارد.

نمونه ی کاربردی از رشته در جاوا

public class StringExample{  
public static void main(String args[]){  
String s1="java";//creating string by java string literal  
char ch[]={'m','y','p','g','r','.','i','r'};  
String s2=new String(ch);//converting char array to string  
String s3=new String("example");//creating java string by new keyword  
System.out.println(s1);  
System.out.println(s2);  
System.out.println(s3);  
}}

خروجی :

java
mypgr.ir
example

متدهای کلاس String در Java

کلاس java.lang.String تعداد زیادی متد کاربردی برای انجام عملیات مختلف بر روی دنباله ای از کاراکترها ارائه می دهد که در زیر به آن ها اشاره می کنیم :

ردیفمتدتوضیحات
1char charAt(int index)
اندیس (شماره ی مکان قرارگیری) کاراکتر را به عنوان ورودی گرفته و در خروجی مقدار char متناظر (مقیم در آن اندیس) را برمی گرداند.
2int length()
طول یا تعداد کاراکترهای موجود در رشته را برمی گرداند.
3static String format(String format, Object… args)
یک string به عنوان ورودی گرفته و پس از فرمت دهی آن بر اساس پارامتر اول، رشته ی فرمت دهی شده را در خروجی برمی گرداند.
4static String format(Locale l, String format, Object… args)
رشته ی ورودی را بر اساس زبان کشور تعیین شده (پارامتر Locale) فرمت دهی نموده و آن را در خروجی برمی گرداند.
5String substring(int beginIndex)
بخشی از کل رشته ورودی را از اندیس مشخص شده استخراج کرده و در خروجی برمی گرداند.
6String substring(int beginIndex, int endIndex)
بخشی از کل رشته ی ورودی را از اندیس شروع تا اندیس پایان که توسط دو پارامتر مشخص می شوند، استخراج می نماید.
7boolean contains(CharSequence s)
بررسی می کند آیا کاراکترهای ارسال شده به عنوان آرگومان در رشته ی موردنظر وجود دارند یا خیر. در صورت صحیح بودن مقدار true و در غیر این صورت false را برمی گرداند.
8static String join(CharSequence delimiter, CharSequence… elements)
دو رشته ی ورودی را به یکدیگر متصل کرده و آن را در خروجی برمی گرداند.
9static String join(CharSequence delimiter, Iterable<? extends CharSequence> elements)
دو رشته ی ورودی را با تفکیک کننده ی تعیین شده (در قالب پارامتر delimiter) به هم متصل کرده و پس از درج تفکیک کننده ی مزبور به ازای هر رشته، رشته ی حاصل را در خروجی برمی گرداند.
10boolean equals(Object another)
دو رشته را بر اساس محتوای آن بایدیگر مقایسه کرده و در صورتی که حتی یک کاراکتر در دو رشته با هم منطبق نباشد، مقدار بولی false را برمی گرداند.
11boolean isEmpty()
بررسی می کند آیا رشته ورودی تهی است یا خیر.
12String concat(String str)
رشته ی ارسال شده به عنوان ورودی را به انتهای رشته ی مورد نظر متصل کرده و آن را در خروجی بر می گرداند.
13String replace(char old, char new)
تمامی نمونه های char را در رشته ی مورد نظر پیدا کرده و آن را با مقدار جدید (پارامتر ورودی دوم) جایگزین می کند.
14String replace(CharSequence old, CharSequence new)
تمامی نمونه های char در رشته ی مورد نظر (یا CharSequence) را پیدا کرده آن ها را با مقدار جدید جایگزین می کند.
15static String equalsIgnoreCase(String another)
دو رشته را با یکدیگر مقایسه کرده و در مقایسه ی آن ها نسبت به کوچک و بزرگی حروف حساس نمی باشد.
16String[] split(String regex)
یک رشته را بر اساس مقدار پارامتر (الگویی که کاراکتر تجزیه را مشخص می کند) regex تجزیه (تکه تکه) کرده و آن را در خروجی مانند یک آرایه از کاراکترها برمی گرداند.
17String[] split(String regex, int limit)
رشته ی ورودی را بر اساس مقدار regex تجزیه کرده و سپس با توجه به مقدار پارامتر دوم (limit) تعداد مشخصی از زیر رشته ها را در قالب آرایه برمی گرداند.
18String intern()
رشته ی مورد نظر را با فرمت استاندارد و متعارف برمی گرداند.
با استفاده از این تابع می توان رشته ی مورد نظر را که فقط با کلیدواژه ی new از آن در حافظه ی heap نمونه سازی شده را از ناحیه ی pool حافظه فراخوانی کرد.
19int indexOf(int ch)
اندیس مقدار char مورد نظر را برمی گرداند.
20int indexOf(int ch, int fromIndex)
اندیس متناظر مقدار char، ارسال شده به عنوان آرگومان اول را با توجه به اندیس شروع که توسط پارامتر دوم مشخص می شود، برمی گرداند.
21int indexOf(String substring)
اندیس متناظر زیر رشته ی ارسال شده به عنوان آرگومان را برمی گرداند.
22int indexOf(String substring, int fromIndex)
اندیس زیررشته ی ارسال شده به عنوان آرگومان را با توجه به مقدار پارامتر دوم که اندیس شروع را تعیین می کند، برمی گرداند.
23String toLowerCase()
رشته ی ورودی را به حروف کوچک تبدیل کرده و در خروجی برمی گرداند.
24String toLowerCase(Locale l)
رشته ی ورودی را با توجه به زبان محلی، تعیین شده توسط پارامتر locale، به حروف کوچک تبدیل کرده و در خروجی برمی گرداند.
25String toUpperCase()
رشته ی ورودی را به حروف بزرگ تبدیل کرده و آن را در خروجی برمی گرداند.
26String toUpperCase(Locale l)
رشته ی ورودی را با توجه به زبان محلی، تعیین شده توسط پارامتر locale، به حروف بزرگ تبدیل کرده و آن را در خروجی برمی گرداند.
27String trim()
فضای خالی را از ابتدا و انتهای رشته ی ورودی حذف کرده و رشته ی ویرایش شده را برمی گرداند.
28static String valueOf(int value)
مقدار ورودی را به رشته تبدیل کرده و آن را در خروجی برمی گرداند.

 

 

 


نظرات

توجه : لطفاً فقط نظرات خود را از این طریق ارسال نمایید و سوالات و مشکلات خود را در انجمن سایت مطرح نمایید.

دیدگاهتان را بنویسید