שרשור מיתרים בג'אווה

1. הקדמה

Java מספקת מספר ניכר של שיטות ושיעורים המוקדשים שרשור מיתרים.

במדריך זה נצלול למספר מהם וכן מתאר כמה מלכודות נפוצות ושיטות עבודה גרועות.

2. StringBuilder

ראשית הוא הצנוע StringBuilder. הכיתה הזאת מספק מערך של חוּט-שירותי בנייה שעושה עבודה קלה של חוּט מָנִיפּוּלָצִיָה.

בואו לבנות דוגמה מהירה של חוּט שרשור באמצעות StringBuilder מעמד:

StringBuilder stringBuilder = StringBuilder חדש (100); stringBuilder.append ("באלדונג"); stringBuilder.append ("is"); stringBuilder.append ("מדהים"); assertEquals ("Baeldung is awesome", stringBuilder.toString ());

כְּלַפֵּי פְּנִים, StringBuilder שומר על מערך דמויות משתנה. בדוגמת הקוד שלנו, הכרזנו שיש לזה גודל ראשוני של 100 דרך ה StringBuilder בַּנַאִי. בגלל הצהרת גודל זו, StringBuilder יכול להיות יעיל מאודדרך לשרשר מיתרים.

ראוי גם לציין כי StringBuffer class היא הגרסה המסונכרנת של StringBuilder.

למרות שסנכרון הוא לרוב שם נרדף לבטיחות חוטים, הוא אינו מומלץ לשימוש ביישומים מרובי הליכי בשל StringBuffer דפוס בונה. אמנם שיחות בודדות לשיטה מסונכרנת אינן בטוחות בשרשור, אך מספר שיחות אינן.

3. מפעיל תוספות

הבא הוא מפעיל התוספת (+). זהו אותו אופרטור שמביא לתוספת מספרים והוא עמוס יתר לשרשור כאשר מוחל עליו מיתרים.

בואו נסתכל במהירות על איך זה עובד:

String myString = "השועל" + "המהיר" + "החום" + "..."; assertEquals ("השועל החום המהיר ...", myString);

במבט ראשון זה עשוי להיראות הרבה יותר תמציתי מ- StringBuilder אוֹפְּצִיָה. עם זאת, כאשר קוד המקור מתגודד, סמל + מתורגם לשרשראות של StringBuilder.append () שיחות. בעקבות זאת, ערבוב StringBuilder ושיטת + של שרשור הוא נחשב לתרגול רע.

בנוסף, חוּט יש להימנע משרשור באמצעות אופרטור + בתוך לולאה. מאז חוּט לא ניתן לשנות את האובייקט, כל קריאה לשרשור תביא לחדש חוּט אובייקט שנוצר.

4. חוּט שיטות

ה חוּט הכיתה עצמה מספקת שורה שלמה של שיטות לשרשור מיתרים.

4.1. String.concat

באופן לא מפתיע, ה String.concat השיטה היא נמל השיחה הראשון שלנו כשמנסים לשרשר חוּט חפצים. שיטה זו מחזירה א חוּט אובייקט, כך שרשרת השיטה היא תכונה שימושית.

String myString = "גם" .concat ("הפכפך") .concat ("גמדים") .concat ("jinx") .concat ("שלי") .concat ("חזיר") .concat ("חידון"); assertEquals ("שני הגמדים ההפכפכים ג 'ינקס חידון החזיר שלי", myString);

בדוגמה זו מתחילים את השרשרת שלנו עם חוּט מילולית, ה קונקאט לאחר מכן השיטה מאפשרת לנו לשרשר את השיחות להצטרפות נוספת מיתרים.

4.2. מחרוזת.פורמט

הבא הוא מחרוזת.פורמט שיטה, המאפשרת לנו להזריק מגוון של Java חפצים לתוך חוּט תבנית.

ה מחרוזת.פורמט חתימת השיטה לוקחת א יחיד חוּט המציין את התבנית שלנו. זֶה התבנית מכילה תווים '%' לייצוג היכן השונים חפציםצריך להיות ממוקם בתוך זה.

לאחר הכרזת התבנית שלנו, אז לוקח varargs לְהִתְנַגֵד מערך אשר מוזרק לתוך התבנית.

בואו נראה איך זה עובד עם דוגמה מהירה:

מחרוזת myString = String.format ("% s% s% .2f% s% s,% s ...", "אני", "אכל", 2.5056302, "אוכמניות", "פשטידות", "אופס"); assertEquals ("אכלתי 2.51 פשטידות אוכמניות, אופס ...", myString);

כפי שניתן לראות לעיל, השיטה הזריקה את שלנו מיתרים לתבנית הנכונה.

4.3. מחרוזת.הצטרף (Java 8+)

אם שלנו היישום פועל ב- Java 8או מעל, אנו יכולים לנצל את מחרוזת.הצטרף שיטה. בעזרת זה, אנחנו יכולים להצטרף למערך של מיתרים עם תיחום משותף, להבטיח שלא יחמיצו מקומות.

String [] strings = {"I'm", "running", "out", "of", "pangrams!"}; String myString = String.join ("", strings); assertEquals ("נגמרות לי הפאנגרמות!", myString); 

יתרון עצום בשיטה זו הוא שלא צריך לדאוג לתחום בין המיתרים שלנו.

5. StringJoiner (Java 8+)

StringJoiner תמצית את כל ה מחרוזת.הצטרף פונקציונליות לכיתה פשוטה לשימוש. ה constructor לוקח מפריד, עם קידומת וסיומת אופציונליים. אנחנו יכולים להוסיף מיתרים באמצעות שם טוב לְהוֹסִיף שיטה.

StringJoiner fruitJoiner = StringJoiner חדש (","); fruitJoiner.add ("תפוחים"); fruitJoiner.add ("תפוזים"); fruitJoiner.add ("בננות"); assertEquals ("תפוחים, תפוזים, בננות", fruitJoiner.toString ());

על ידי שימוש בכיתה זו, במקום ה- מחרוזת.הצטרף שיטה, אנחנו יכולים להוסיף מיתרים ככל שהתוכנית פועלת; אין צורך ליצור תחילה את המערך!

עבור אל המאמר שלנו בנושא StringJoiner לקבלת מידע נוסף ודוגמאות.

6. Arrays.toString

בנושא המערכים, ה מַעֲרָך הכיתה מכילה גם שימושי toString שיטה אשר מעצבת יפה מגוון של אובייקטים. ה מערכים.toString שיטה מכנה גם toString שיטה של ​​כל אובייקט סגור - לכן עלינו לוודא שיש לנו אחד מוגדר.

מחרוזת [] myFavouriteLanguages ​​= {"Java", "JavaScript", "Python"}; String toString = Arrays.toString (myFavouriteLanguages); assertEquals ("[Java, JavaScript, Python]", toString);

לצערנו, ה מערכים.toString השיטה אינה ניתנת להתאמה אישית ויחידה תפוקות א חוּט עטוף בסוגריים מרובעים.

7. אספנים. מצטרפים (Java 8+)

לבסוף, בואו נסתכל על ה- אספנים. מצטרפים שיטה אשר מאפשר לנו משפך את הפלט של a זרם לסינגל חוּט.

רשימת awesomeAnimals = Arrays.asList ("כריש", "פנדה", "ארמדילו"); מחרוזת animalString = awesomeAnimals.stream (). Collect (Collectors.joining (",")); assertEquals ("כריש, פנדה, ארמדילו", בעלי חיים מחרוזת);

שימוש בזרמים פותח את כל הפונקציונליות הקשורה ל- Java 8 זרם ממשק API, כגון סינון, מיפוי, איטרציה ועוד.

8. להתעטף

במאמר זה לקחנו א לצלול עמוק לתוך שלל השיעורים והשיטות המשמשות לשרשור מיתריםבשפת Java.

כמו תמיד, קוד המקור זמין ב- GitHub.