تبلیغات

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

کاربرد متد format در کلاس String جاوا | java.lang.format()
هادی اکبرزاده
نوشته شده توسط هادی اکبرزاده

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


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

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

متد format

متد format، همچون متد  printf، یک رشته و تعدادی ورودی آبجکت دریافت کرده و از آن‌جایی که ورودی رشته (اول)، همان ورودی رشته‌ی فرمت بندی شده است، آبجکت‌ها روی این ورودی تاثیر گذاشته و یک خروجی رشته‌ای را به بیرون از متد برمی‌گردانند. اگر به ساختار این متد توجه کنید، خواهید دید که بعد از ورودی اول، یک ورودی از نوع بی‌نهایت آبجکت تعریف شده است.


تفاوت printf با format: متد printf بعد از فرمت بندی، رشته را چاپ می‌کند ولی متد format آن را به بیرون برمی‌گرداند.

مثال:

همانطور که می‌بینید، مقدار 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 دو رقمی بوده، پس تعداد خود رقم نیز در این فاصله قرار می‌گیرد.

اما اگر بخواهیم به جای فضای خالی، صفر قرار بگیرد؟

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

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


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

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

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

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


اگر بخواهیم سه رقم سه رقم با ویرگول جدا شود:


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


به چند مورد دیگر نیز در آینده و در همین پست می‌پردازیم!

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

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

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

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

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

آن‌گاه که هرچیزی را به یک چشم دیدیم، حقیقت برایمان نابود می‌شود! باید توجه کنیم که خدا به ما دو چشم داده است!
Telegram

پاسخ دهید

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

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