הצטרף ל- Array of Primitives with Separator ב- Java

1. הקדמה

במדריך מהיר זה, נלמד כיצד הצטרף למערך של פרימיטיבים עם מפריד תווים יחיד בג'אווה. לדוגמאות שלנו, נשקול שני מערכים: מערך של int ומערך של לְהַשְׁחִיר.

2. הגדרת הבעיה

נתחיל בהגדרת מערך של int ומערך של לְהַשְׁחִיר עבור הדוגמאות, כמו גם את תו המפריד שנשתמש בו כדי להצטרף לתוכן שלהם:

int [] intArray = {1, 2, 3, 4, 5, 6, 7, 8, 9}; char [] charArray = {'a', 'b', 'c', 'd', 'e', ​​'f'}; separatorChar = '-'; מפריד מחרוזת = String.valueOf (separatorChar); 

שים לב ששילבנו את שניהם א לְהַשְׁחִיר ו חוּט מפריד מאז חלק מהשיטות שנציג דורשות לְהַשְׁחִיר ויכוח, בעוד שאחרים דורשים חוּט טַעֲנָה.

תוצאות פעולת ההצטרפות יכילו “1-2-3-4-5-6-7-8-9” בשביל ה int מערך, ו "א ב ג ד ה ו" בשביל ה לְהַשְׁחִיר מַעֲרָך.

3. Collectors.joining ()

נתחיל באחת מהשיטות הזמינות מ- Java 8 Stream API - Collectors.joining ().

ראשית, אנו יוצרים a זרם ממגוון של פרימיטיבים המשתמשים ב- Arrays.stream () השיטה שנמצאת ב java.util חֲבִילָה. לאחר מכן, אנו ממפים כל אלמנט אל חוּט. ולבסוף, אנו משרשרים את האלמנטים עם המפריד הנתון שלנו.

נתחיל עם שלנו int מַעֲרָך:

מחרוזת הצטרפה = Arrays.stream (intArray) .mapToObj (מחרוזת :: valueOf) .collect (Collectors.joining (מפריד));

כשמצטרפים לְהַשְׁחִיר מערך בשיטה זו, ראשית עלינו לעטוף את לְהַשְׁחִיר מערך לתוך CharBuffer ואז להקרין את זה ל לְהַשְׁחִיר שוב. הסיבה לכך היא ש תווים () שיטה מחזירה א זרם שֶׁל int ערכים.

למרבה הצער, ה- API של Java Stream אינו מספק שיטה מקורית לעטיפה של זרם שֶׁל לְהַשְׁחִיר.

בואו נצטרף לשלנו לְהַשְׁחִיר מַעֲרָך:

מחרוזת הצטרפה = CharBuffer.wrap (charArray). Charts () .mapToObj (intValue -> String.valueOf ((char) intValue)) .collect (Collectors.joining (separator));

4. StringJoiner

דומה ל Collectors.joining (), גישה זו עושה שימוש ב- API של Stream, אך במקום לאסוף אלמנטים, היא חוזרת באמצעות אלמנטים ומוסיפה אותם ל- StringJoiner למשל:

StringJoiner intStringJoiner = StringJoiner חדש (מפריד); Arrays.stream (intArray) .mapToObj (String :: valueOf) .forEach (intStringJoiner :: add); מחרוזת הצטרפה = intStringJoiner.toString ();

שוב, עלינו לעטוף את שלנו לְהַשְׁחִיר מערך לתוך CharBuffer בעת שימוש ב- API של Stream:

StringJoiner charStringJoiner = StringJoiner חדש (מפריד); CharBuffer.wrap (charArray) .chars () .mapToObj (intChar -> String.valueOf ((char) intChar)) .forEach (charStringJoiner :: add); מחרוזת הצטרפה = charStringJoiner.toString ();

5. אפאצ'י קומונס לאנג

ספריית Apache Commons Lang מספקת כמה שיטות שימושיות ב- StringUtils ו ArrayUtils שיעורים שבהם נוכל להשתמש כדי להצטרף למערכים הפרימיטיביים שלנו.

כדי להשתמש בספריה זו, נצטרך להוסיף את ה- commons-lang3 תלות שלנו pom.xml:

 org.apache.commons commons-lang3 3.8.1 

כשעובדים עם א חוּט מפריד, נשתמש בשניהם StringUtils ו ArrayUtils.

בואו נשתמש ביחד כדי להצטרף ל int מַעֲרָך:

מחרוזת הצטרפה = StringUtils.join (ArrayUtils.toObject (intArray), מפריד);

או אם אנו משתמשים בפרימיטיבי לְהַשְׁחִיר הקלד כמפריד, נוכל פשוט לכתוב:

מחרוזת הצטרפה = StringUtils.join (intArray, separatorChar);

היישומים להצטרפות שלנו לְהַשְׁחִיר מערך די דומה:

מחרוזת הצטרפה = StringUtils.join (ArrayUtils.toObject (charArray), מפריד);

וכאשר משתמשים ב- לְהַשְׁחִיר מפריד:

מחרוזת הצטרפה = StringUtils.join (charArray, separatorChar);

6. גויאבה

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

 com.google.guava גויאבה 27.0.1-jre 

בואו נצטרף לשלנו int מערך באמצעות נַגָר מעמד:

מחרוזת הצטרפה = Joiner.on (מפריד) .join (Ints.asList (intArray));

בדוגמה זו השתמשנו גם ב- Ints.asList () שיטה מגויאבה, שהופכת יפה את מערך הפרימיטיבים ל- a רשימה שֶׁל מספר שלם.

גויאבה מציעה שיטה דומה להמרת לְהַשְׁחִיר מערך ל- a רשימה שֶׁל אופי. כתוצאה מכך, הצטרפות שלנו לְהַשְׁחִיר מערך נראה מאוד כמו הדוגמה לעיל שהשתמשה ב- int מַעֲרָך:

מחרוזת הצטרפה = Joiner.on (מפריד) .join (Chars.asList (charArray));

7. StringBuilder

סוף כל סוף, אם איננו יכולים להשתמש בספריות Java 8 או בספריות צד שלישי, אנו יכולים להצטרף באופן ידני למערך של אלמנטים StringBuilder. במקרה זה, היישום זהה לשני סוגי המערכים:

אם (array.length == 0) {return ""; } StringBuilder stringBuilder = StringBuilder חדש (); עבור (int i = 0; i <array.length - 1; i ++) {stringBuilder.append (array [i]); stringBuilder.append (מפריד); } stringBuilder.append (מערך [array.length - 1]); מחרוזת הצטרפה = stringBuilder.toString ();

8. מסקנה

מאמר מהיר זה ממחיש מספר דרכים להצטרף למערך של פרימיטיבים עם תו או מחרוזת נתון. הראינו דוגמאות תוך שימוש בפתרונות JDK מקוריים, כמו גם בפתרונות נוספים המשתמשים בשתי ספריות צד שלישי - Apache Commons Lang ו- Guava.

כמו תמיד, הקוד השלם המשמש במאמר זה זמין באתר GitHub.