تبلیغات

کاربرد متد format در کلاس String جاوا

کاربرد متد format در کلاس String جاوا | java.lang.format()

java.lang.String.format()
کاربرد متد format در کلاس String جاوا


فرمت دادن به رشته، یکی از قابلیت‌های کلاس String می‌باشد که البته به گونه‌ای این قابلیت، مربوط به کلاس java.util.Formatter نیز می‌شود. همچنین کار با کلاس Formatter، پیچیدگی خاص خود را دارد؛ ولی در اینجا اصلا با آن کار نخواهیم داشت.

اگر با متد printf که در System.out.printf برای چاپ خروجی برنامه‌های کنسولی جاوا استفاده می‌شود کار کرده باشید، شاید در این متد از رشته‌ی فرمت‌بندی شده نیز استفاده کرده‌اید؛ به صورت کلی، اگر بخواهیم برای متنی مشخص کنیم که در قسمت‌هایی از آن، مقدارهای مشخص شده‌ای قرار بگیرد، از فرمت‌بندی استفاده می‎‌شود.

متد printf و format هردو یکی هستند! با این تفاوت که اولی پس از فرمت‌بندی خروجی را در کنسول چاپ می‌کند، ولی دومی آن را از متد به بیرون می‌گرداند (return).

روش استفاده از format

متد format کلاس String، همچون متد printf، یک رشته و تعدادی ورودی آبجکت دریافت می‌کند و از آنجایی که ورودی اول، همان ورودی رشته‌ی فرمت‌بندی شده است، ورودی‌های دیگر روی این ورودی تاثیر گذاشته و یک خروجی رشته‌ای را به بیرون از متد برمی‌گرداند. در واقع در ورودی اول، با استفاده از علائمی به نام مشخص‌کننده، قسمت‌های مورد نظر را مشخص می‌کنیم تا توسط ورودی‌هاای بعدی مقداردهی شوند. اگر به ساختار این متد توجه کنید، خواهید دید که بعد از ورودی اول، یک ورودی از نوع بی‌نهایت آبجکت تعریف شده است. به مثال زیر توجه کنید:

همانطور که می‌بینید، مقدار Hadi به جای %s و مقدار 22 به جای %d قرار گرفته است؛ ولی چگونه؟!

طرز کار format

باید به همان تعدادی که از علائم فرمت‌بندی (یعنی مشخص‌کننده‌ها) در رشته‌ی ورودی (پارامتر اول) استفاده می‌شود، ورودی‌های دیگری وجود داشته باشند! برای نمونه، در مثال بالا دو مشخص‌کننده در متن وجود دارد و به همان تعداد نیز دو ورودی بعد از متن به داخل متد ارسال شده است؛ که البته این ورودی‌ها نیز بایستی به ترتیب مشخص‌کننده‌های به کار برده شده در متن، به داخل متد فرستاده شوند.

برای هر نوع ورودی متد که بعد از ورودی اول (متن) نوشته می‌شود، بایستی یک نوع فرمت‌بندی با استفاده از مشخص‌کننده‌ها داخل متن انجام بگیرد. همانطور که در مثال بالا مشاهده می‌شود، برای مشخص‌کننده‌ی s%، حتما باید یک رشته استفاده شود و برای d% نیز بایستی مقداری با توجه به نوع خودش نوشته شود. این مقادیر حتما بایستی به ترتیب مشخص‌کننده‌های داخل متن نوشته شوند که البته در ادامه، روشی خواهیم گفت تا به صورت دستی بتوان برای مشخص‌کننده‌ای تعیین کرد که مقدار آن از کدام ورودی گرفته شود.

در جدول زیر، لیست مشخص‌کننده‌ها و توضیحاتشات ذکر شده است:

مشخص کننده ورودی در پارامتر خروجی در رشته
%a ورودی float به جز BigDecimal Hex output of floating point number
%b هر نوع ورودی اگر null نباشد، true و اگر null باشد false
%c char Unicode character
%d integer (incl. byte, short, int, long, bigint) عدد بر مبنای ده یا همان ورودی (Decimal Integer)
%e Float decimal number in scientific notation
%f Float decimal number
%g Float decimal number, possibly in scientific notation depending on the precision and value
%h هر نوع ورودی Hex String of value from hashCode() method
 %n none Platform-specific line separator
%o integer (incl. byte, short, int, long, bigint) عدد بر مبنای هشت (Octal number)
%s هر نوع ورودی رشته (String)
%t Date/Time (incl. long, Calendar, Date and TemporalAccessor) تاریخ و زمان (فرمت بندی بیشتر در این مورد، در جدول زیر)
%x integer (incl. byte, short, int, long, bigint) عدد بر مبای 16 (Hex string)

فرمت‌بندی Data/Time:

مشخص کننده توضیح
%tA نام کامل روز در هفته، برای مثال: “Sunday“, “Monday“
 %ta مخفف نام روز در هفته، برای مثال: “Sun“, “Mon“
 %tB نام کامل ماه، برای مثال: “January“, “February“
 %tb مخفف نام ماه، برای مثال: “Jan“, “Feb“
 %tC Century part of year formatted with two digits e.g. “00” through “99”
 %tc Date and time formatted with “%ta %tb %td %tT %tZ %tY” e.g. “Fri Feb 17 07:45:42 PST 2017
 %tD Date formatted as “%tm/%td/%ty
 %td Day of the month formatted with two digits. e.g. “01” to “31
 %te Day of the month formatted without a leading 0 e.g. “1” to “31”
%tF ISO 8601 formatted date with “%tY-%tm-%td
%tH Hour of the day for the 24-hour clock e.g. “00” to “23
%th Same as %tb
%tI Hour of the day for the 12-hour clock e.g. “01” – “12
%tj Day of the year formatted with leading 0s e.g. “001” to “366
%tk Hour of the day for the 24 hour clock without a leading 0 e.g. “0” to “23
%tl Hour of the day for the 12-hour click without a leading 0 e.g. “1” to “12
%tM Minute within the hour formatted a leading 0 e.g. “00” to “59
%tm Month formatted with a leading 0 e.g. “01” to “12
%tN Nanosecond formatted with 9 digits and leading 0s e.g. “000000000” to “999999999”
%tp Locale specific “am” or “pm” marker
%tQ Milliseconds since epoch Jan 1 , 1970 00:00:00 UTC
%tR Time formatted as 24-hours e.g. “%tH:%tM
%tr Time formatted as 12-hours e.g. “%tI:%tM:%tS %Tp
%tS Seconds within the minute formatted with 2 digits e.g. “00” to “60”. “60” is required to support leap seconds
%ts Seconds since the epoch Jan 1, 1970 00:00:00 UTC
%tT Time formatted as 24-hours e.g. “%tH:%tM:%tS
%tY Year formatted with 4 digits e.g. “0000” to “9999
%ty Year formatted with 2 digits e.g. “00” to “99
%tZ Time zone abbreviation. e.g. “UTC“, “PST“, etc
%tz

Time Zone Offset from GMT e.g. “
-0800
“.

مشخص کردن دستی پارامتر

به مثال زیر توجه کنید:

اگر به یاد داشته باشید، گفته شد که مشخص‌کننده‌ی %s، برای گرفتن مقدار رشته‌ای استفاده می‌شود؛ ولی در کد بالا، بین علامت % و s، یک عدد و پشت سر آن علامت $ قرار گرفته است! در اینجا، علامت $ می‌گوید که مقدار این مشخص‌کننده، از کدام ورودی گرفته شود؛ که در این مثال از ورودی دوم مقدار آن گرفته شده است و این ورودی برابر مقدار Hadi می‌باشد.

مشخص کردن چند نکته‌ی دیگر

به مثال زیر توجه کنید:

همانطور که باید بدانید، از این مشخص‌کننده برای گرفتن ورودی اعداد صحیح استفاده می‌شود!


حالا به مثال زیر توجه کنید:

اگر بین علامت % و حرف مشخص‌کننده، یک عدد نوشته شود، و اگر این عدد مثبت باشد، سمت چپ آن با تعدادی فاصله پر خواهد شد و اگر منفی باشد، سمت راست آن با تعدادی فاصله پر خواهد شد! در مثال بالا نیز سمت چپ، با 18 فاصله پر شده است؛ ولی پس چرا عدد 20 نوشته شده است؟! زیرا مقدار 93 دو حرف دارد که یعنی تعداد کاراکترهای ورودی نیز در این فاصله حساب می‌شوند. به مثال دیگری توجه کنید که از منفی برای قرار گرفتن فاصله در سمت راست استفاده شده است:

اما اگر نیاز باشد که به جای فاصله، عدد 0 قرار بگیرد، بایستی به صورت زیر عمل کرد:

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

نکته
فرض کنید بخواهید مقدار ساعت را نمایش دهید؛ اینگونه مشخص می‌کنید تا اگر دو رقمی نبود، یک صفر کنار آن نمایش داده شود.

با وجود این کارها، چطور می‌توان علامت مثبت و منفی برای عدد قرار داد؟!

اگر علامت مثبت قبل از درصد قرار داده شود، در خروجی تولید شده قبل از فاصله‌ها نمایش داده خواهد شد! ولی اگر بعد از درصد قرار داده شود، درست قبل از مقدار اصلی نمایش داده خواهد شد. همانند مثال بالا! همچنین اگر عدد 0 قبل از عدد 20 نوشته شود، علامت مثبت، قبل از ارقام صفر قرار خواهد گرفت!

ولی برای نمایش عدد منفی اینگونه نمی‌شود عمل کرد! چرا که عدد منفی، باعث می‌شود سمت راست فاصله بیفتد؛ ولی به یک نکته باید توجه داشت که اگر عدد منفی باشد، خود به خود علامت منفی در خروجی نمایش داده می‌شود و این مثبت بود که هیچ‌گاه نمایش داده نمیشد! پس نیازی به قرار دادن علامت منفی نیست. به مثال زیر توجه کنید:

حتی اگر در اینجا، علامت مثبت را هم استفاده کنیم، چون منفی است ظاهر نمی‌شود!


جدا کردن سه رقم سه رقم عدد:


حذف منفی و قرار دادن داخل پرانتز:


و کلی استفادهای دیگری که مجال نوشتن آنها در اینجا ممکن نیست …

تبلیغات
0
کانال تلگرام فول کده
تبلیغات

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

هادی اکبرزاده

[ مدیر فول کده ]

علاقه‌مند به اشتراک گذاری اطلاعات در هر زمینه‌ای / برنامه‌نویس

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

نظرات ثبت شده بدون دیدگاه