המרת מחרוזת ל- int או שלם ב- Java

1. הקדמה

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

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

2. Integer.parseInt ()

אחד הפתרונות העיקריים הוא להשתמש מספר שלםשיטה סטטית ייעודית: parseInt (), שמחזיר פרימיטיבי int ערך:

@Test הציבור בטל givenString_whenParsingInt_shouldConvertToInt () {String givenString = "42"; int result = Integer.parseInt (givenString); assertThat (תוצאה). isEqualTo (42); }

כברירת מחדל, ה- parseInt () השיטה מניחה את הנתון חוּט הוא מספר שלם בסיס 10. בנוסף, שיטה זו מקבלת טיעון נוסף לשינוי ברירת מחדל זו בסיס. למשל, אנו יכולים לנתח בינארי חוּטכדלקמן:

@Test הציבור בטל givenBinaryString_whenParsingInt_shouldConvertToInt () {String givenString = "101010"; int result = Integer.parseInt (givenString, 2); assertThat (תוצאה). isEqualTo (42); }

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

3. Integer.valueOf ()

אפשרות אחרת תהיה השתמש בסטטי Integer.valueOf () שיטה, המחזירה מספר שלם למשל:

@Test ציבור בטל givenString_whenCallingIntegerValueOf_shouldConvertToInt () {String givenString = "42"; תוצאה שלמה = Integer.valueOf (givenString); assertThat (תוצאה). isEqualTo (מספר שלם חדש (42)); }

באופן דומה, ה ערך של() השיטה מקבלת גם מותאם אישית בסיס כטענה השנייה:

@Test הציבור בטל givenBinaryString_whenCallingIntegerValueOf_shouldConvertToInt () {String givenString = "101010"; תוצאה שלמה = Integer.valueOf (givenString, 2); assertThat (תוצאה). isEqualTo (מספר שלם חדש (42)); }

3.1. מטמון שלם

במבט ראשון, נראה כי ערך של() ו parseInt () השיטות זהות לחלוטין. לרוב זה נכון - אפילו ערך של() נציגי השיטה ל מזויף שיטה פנימית.

עם זאת, יש הבדל אחד עדין בין שתי השיטות הללו: ה ערך של() השיטה היא באמצעות מטמון שלם באופן פנימי. המטמון הזה היה להחזיר אותו מספר שלם למשל למספרים שבין -128 ל- 127:

@ מבחן חלל ציבורי givenString_whenCallingValueOf_shouldCacheSomeValues ​​() {for (int i = -128; i <= 127; i ++) {ערך מחרוזת = i + ""; מספר שלם ראשון = Integer.valueOf (ערך); מספר שלם שני = Integer.valueOf (ערך); assertThat (הראשון). isSameAs (השני); }}

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

4. מספר שלםבונה

אתה יכול גם להשתמש מספר שלםבונה:

@Test ציבורי בטל givenString_whenCallingIntegerConstructor_shouldConvertToInt () {String givenString = "42"; תוצאה שלמה = מספר שלם חדש (givenString); assertThat (תוצאה). isEqualTo (מספר שלם חדש (42)); }

נכון ל- Java 9, בונה זה הוצא משימוש לטובת שיטות סטטיות אחרות של המפעל כגון ערך של() אוֹ parseInt (). עוד לפני הפחתה זו, לעתים נדירות היה מתאים להשתמש בבנאי זה. עלינו להשתמש parseInt () להמיר מחרוזת ל- int פרימיטיבי או שימוש ערך של() להמיר אותו ל- מספר שלם לְהִתְנַגֵד.

5. Integer.decode ()

גַם, Integer.decode () עובד באופן דומה ל Integer.valueOf (), אך יכול גם לקבל ייצוגי מספר שונים:

@Test הציבור בטל givenString_whenCallingIntegerDecode_shouldConvertToInt () {String givenString = "42"; int result = Integer.decode (givenString); assertThat (תוצאה). isEqualTo (42); }

6. NumberFormatException

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

@Test (צפוי = NumberFormatException.class) חלל ציבורי givenInvalidInput_whenParsingInt_shouldThrow () {String givenString = "nan"; Integer.parseInt (givenString); }

7. עם גויאבה

כמובן, אנחנו לא צריכים להיצמד לליבה של ג'אווה עצמה. כך ניתן להשיג את אותו הדבר באמצעות גויאבה Ints.tryParse (), שמחזיר א ריק ערך אם הוא לא יכול לנתח את הקלט:

@Test הציבור בטל givenString_whenTryParse_shouldConvertToInt () {String givenString = "42"; תוצאה שלמה = Ints.tryParse (givenString); assertThat (תוצאה). isEqualTo (42); }

יתר על כן, ה tryParse () השיטה מקבלת גם שנייה בסיס טענה דומה ל parseInt () ו ערך של().

8. מסקנה

במאמר זה בחנו דרכים רבות להמרה חוּט מקרים ל int אוֹ מספר שלם מקרים.

ניתן למצוא כמובן את כל דוגמאות הקוד ב- GitHub.


$config[zx-auto] not found$config[zx-overlay] not found