تبلیغات

کاربرد متد 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 به جز BigDecimalHex output of floating point number
%bهر نوع ورودیاگر null نباشد، true و اگر null باشد false
%ccharUnicode character
%dinteger (incl. byte, short, int, long, bigint)عدد بر مبنای ده یا همان ورودی (Decimal Integer)
%eFloatdecimal number in scientific notation
%fFloatdecimal number
%gFloatdecimal number, possibly in scientific notation depending on the precision and value
%hهر نوع ورودیHex String of value from hashCode() method
 %nnonePlatform-specific line separator
%ointeger (incl. byte, short, int, long, bigint)عدد بر مبنای هشت (Octal number)
%sهر نوع ورودیرشته (String)
%tDate/Time (incl. long, Calendar, Date and TemporalAccessor)تاریخ و زمان (فرمت بندی بیشتر در این مورد، در جدول زیر)
%xinteger (incl. byte, short, int, long, bigint)عدد بر مبای 16 (Hex string)

فرمت بندی Data / Time

مشخص کنندهتوضیح
%tAنام کامل روز در هفته، برای مثال: “Sunday“, “Monday“
 %taمخفف نام روز در هفته، برای مثال: “Sun“, “Mon“
 %tBنام کامل ماه، برای مثال: “January“, “February“
 %tbمخفف نام ماه، برای مثال: “Jan“, “Feb“
 %tCCentury part of year formatted with two digits e.g. “00” through “99”
 %tcDate and time formatted with “%ta %tb %td %tT %tZ %tY” e.g. “Fri Feb 17 07:45:42 PST 2017
 %tDDate formatted as “%tm/%td/%ty
 %tdDay of the month formatted with two digits. e.g. “01” to “31
 %teDay of the month formatted without a leading 0 e.g. “1” to “31”
%tFISO 8601 formatted date with “%tY-%tm-%td
%tHHour of the day for the 24-hour clock e.g. “00” to “23
%thSame as %tb
%tIHour of the day for the 12-hour clock e.g. “01” – “12
%tjDay of the year formatted with leading 0s e.g. “001” to “366
%tkHour of the day for the 24 hour clock without a leading 0 e.g. “0” to “23
%tlHour of the day for the 12-hour click without a leading 0 e.g. “1” to “12
%tMMinute within the hour formatted a leading 0 e.g. “00” to “59
%tmMonth formatted with a leading 0 e.g. “01” to “12
%tNNanosecond formatted with 9 digits and leading 0s e.g. “000000000” to “999999999”
%tpLocale specific “am” or “pm” marker
%tQMilliseconds since epoch Jan 1 , 1970 00:00:00 UTC
%tRTime formatted as 24-hours e.g. “%tH:%tM
%trTime formatted as 12-hours e.g. “%tI:%tM:%tS %Tp
%tSSeconds within the minute formatted with 2 digits e.g. “00” to “60”. “60” is required to support leap seconds
%tsSeconds since the epoch Jan 1, 1970 00:00:00 UTC
%tTTime formatted as 24-hours e.g. “%tH:%tM:%tS
%tYYear formatted with 4 digits e.g. “0000” to “9999
%tyYear formatted with 2 digits e.g. “00” to “99
%tZTime 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
کانال تلگرام فول کده
تبلیغات

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

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

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

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

پاسخ دهید

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

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