שתי דרכים לעצב
Java מעצבת מחרוזות מתוך תבנית שמכילה מפרטי עיצוב (ממלאי המקום עם %), יחד עם הערכים שמכניסים אליה. יש שתי נקודות כניסה, ולשתיהן תחביר זהה:
String.format(template, values...)מחזירהStringחדש.System.out.printf(template, values...)מדפיסה את התוצאה ישירות.
שתיהן מפיקות את אותו טקסט. String.format מחזירה אותו כדי שתוכלו לשמור אותו; printf כותבת אותו לקונסול. שימו לב ל-%n בסוף התבנית של printf: זה מעבר השורה שלא תלוי בפלטפורמה (העדיפו אותו על פני \n במחרוזות עיצוב).
המפרטים הנפוצים
כל מפרט מתחיל ב-% ומסתיים באות שאומרת איזה סוג ערך לצפות לו:
שלושת היומיומיים הם %s (כל ערך, דרך ה-toString שלו), %d (מספרים שלמים) ו-%f (מספרים עשרוניים). השתמשו ב-%% כדי להדפיס סימן אחוז כפשוטו. העברת טיפוס לא נכון, למשל String ל-%d, זורקת IllegalFormatConversionException בזמן ריצה.
שליטה בספרות אחרי הנקודה
%f מציג כברירת מחדל שש ספרות אחרי הנקודה, וזה כמעט אף פעם לא מה שרוצים. שימו .N לפני ה-f כדי לקבוע את הדיוק (הערך מעוגל):
הוסיפו דגל פסיק למפרידי קבוצות במספרים גדולים:
רוחב וריפוד
מספר בין ה-% לבין אות הטיפוס קובע רוחב שדה מינימלי, ומרפד ברווחים כדי שהעמודות יסתדרו. - בהתחלה מיישר לתחילת השדה; 0 בהתחלה מרפד מספרים באפסים:
זה מה שהופך טבלאות מעוצבות ודוחות מיושרים לקריאים, במיוחד כשמדפיסים כל שורה בתוך לולאת for:
%-8s מיישר את השמות לתחילת עמודה ברוחב 8, ו-%5d מיישר את הציונים לסוף עמודה ברוחב 5, כך שהמספרים מסתדרים בשורה אחת בלי קשר למספר הספרות.
סדר הארגומנטים
כברירת מחדל, המפרטים צורכים ערכים לפי הסדר. אפשר לחזור על ערך או לשנות את הסדר עם N$ (אינדקס שמתחיל מ-1), וזה שימושי כשאותו ערך מופיע פעמיים:
%1$s מתייחס לארגומנט הראשון בשתי הפעמים, ולכן echo מודפס פעמיים.
המתודה formatted()
מאז Java 15, לכל מחרוזת יש מתודת מופע formatted: אותו מנוע כמו String.format, רק שנכתב כקריאה למתודה על התבנית:
היא משתלבת במיוחד טוב עם text blocks (מחרוזות מרובות שורות בשלושה מרכאות) כשבונים פלט מעוצב גדול יותר.
מתי לא להשתמש ב-String.format
לחיבורים פשוטים וחד פעמיים, שרשור רגיל עם + ברור ומהיר יותר:
String greeting = "Hi, " + name + "!"; // simpler than String.format here
השתמשו ב-String.format / printf כשצריך עיצוב אמיתי: מספר קבוע של ספרות אחרי הנקודה, ריפוד, יישור, קיבוץ, ולא רק הדבקה של כמה ערכים יחד.
הבא: אופרטורים
עיצוב הופך ערכים לטקסט. כדי לחשב את הערכים האלה מלכתחילה, צריך את האופרטורים של Java: חשבון, השוואה ולוגיקה. זה העמוד הבא.
שאלות נפוצות
איך מעצבים מחרוזת ב-Java?
משתמשים ב-String.format(template, values...), שמחזירה מחרוזת חדשה שבה כל מפרט עיצוב מוחלף בערך: String.format("%s is %d", name, age). כדי להדפיס ישירות במקום לבנות מחרוזת, משתמשים ב-System.out.printf(...) עם אותה תבנית. מאז Java 15 אפשר גם לקרוא ל-template.formatted(values...).
איך מעצבים מספר עם שתי ספרות אחרי הנקודה ב-Java?
משתמשים במפרט %.2f: String.format("%.2f", 3.14159) מפיק "3.14". המספר שאחרי הנקודה הוא כמה ספרות עשרוניות לשמור, והערך מעוגל. למפריד אלפים מוסיפים דגל פסיק: %,.2f נותן "1,234.57".
מה ההבדל בין String.format ל-printf ב-Java?
הן משתמשות בדיוק באותם מפרטי עיצוב. String.format(...) מחזירה את הטקסט המעוצב כ-String חדש שאפשר לשמור או להעביר הלאה. System.out.printf(...) כותבת את הטקסט המעוצב ישירות לפלט הסטנדרטי ולא מחזירה שום דבר שימושי. השתמשו ב-String.format כדי לבנות מחרוזת, וב-printf כדי להדפיס אחת.