הוסף דמות למחרוזת במיקום נתון

1. הקדמה

במדריך מהיר זה, אנו להדגים כיצד להוסיף דמות בכל מיקום נתון ב- חוּט ב ג'אווה.

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

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

2. שימוש בתו מַעֲרָך

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

לאחר מכן, אנו שמים את הדמות החדשה במיקום ומעתיקים את שאר הדמויות מהמקור חוּט במיקומים הבאים של המערך החדש.

לבסוף, אנו בונים את הרצוי חוּט מאותו מערך.

מחרוזת ציבורי addChar (מחרוזת מחרוזת, char ch, מיקום int) {int len ​​= str.length (); char [] updatedArr = char חדש [len + 1]; str.getChars (0, position, updatedArr, 0); updatedArr [position] = ch; str.getChars (position, len, updatedArr, position + 1); להחזיר מחרוזת חדשה (updatedArr); }

בהשוואה לשתי השיטות האחרות, זוהי גישה עיצובית ברמה נמוכה ונותנת לנו את מירב הגמישות.

3. באמצעות סובסטרינג שיטה

גישה ברמה קלה וגבוהה יותר היא להשתמש ב- תשתית () שיטת ה- חוּט מעמד. זה מכין את חוּט על ידי שרשור:

  1. המצע של המקור חוּט לפני התפקיד
  2. הדמות החדשה
  3. המצע של המקור חוּט אחרי התפקיד
מחרוזת ציבורי addChar (מחרוזת str, char ch, מיקום int) {להחזיר str.substring (0, position) + ch + str.substring (position); }

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

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

יישום זה צריך גם להעתיק את כל הדמויות שלוש פעמים ממערך אחד למשנהו.

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

4. באמצעות א StringBuilder

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

אנו יכולים ליישם את אותה פונקציונליות באמצעות לְהַכנִיס() שיטת ה- StringBuilder מעמד:

מחרוזת addChar (מחרוזת מחרוזת, char ch, מיקום int) ציבורי מחרוזת {StringBuilder sb = StringBuilder חדש (str); sb.insert (עמדה, ch); החזר sb.toString (); }

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

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

5. מסקנה

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

הדרך המועדפת ליישום הפתרון היא השימוש ה StringBuilder class - כיוון שהוא פשוט, פחות נוטה לבאגים ומציע ביצועים טובים ויציבים.

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