Преобразуване на низ в цяло число в Groovy

1. Общ преглед

В този кратък урок ще покажем различни начини за конвертиране от String в Integer в Groovy.

2. Кастинг с as

Първият метод, който можем да използваме за преобразуването, е ключовата дума as , която е същата като извикването на метода asType () на класа :

@Test void givenString_whenUsingAsInteger_thenConvertToInteger() { def stringNum = "123" Integer expectedInteger = 123 Integer integerNum = stringNum as Integer assertEquals(integerNum, expectedInteger) }

Подобно на горното, можем да използваме като int :

@Test void givenString_whenUsingAsInt_thenConvertToInt() { def stringNum = "123" int expectedInt = 123 int intNum = stringNum as int assertEquals(intNum, expectedInt) }

3. toInteger

Друг метод е от разширението Groovy JDK за java.lang.CharSequence :

@Test void givenString_whenUsingToInteger_thenConvertToInteger() { def stringNum = "123" int expectedInt = 123 int intNum = stringNum.toInteger() assertEquals(intNum, expectedInt) }

4. Цяло число # parseInt

Трети начин е използването на статичния метод на Java Integer.parseInt () :

@Test void givenString_whenUsingParseInt_thenConvertToInteger() { def stringNum = "123" int expectedInt = 123 int intNum = Integer.parseInt(stringNum) assertEquals(intNum, expectedInt) }

5. Цяло число # intValue

Алтернативен метод е да се създаде нов Integer обект и да се извика неговият метод intValue :

@Test void givenString_whenUsingIntValue_thenConvertToInteger() { def stringNum = "123" int expectedInt = 123 int intNum = new Integer(stringNum).intValue() assertEquals(intNum, expectedInt) }

Или в този случай можем да използваме само ново цяло число (stringNum) :

@Test void givenString_whenUsingNewInteger_thenConvertToInteger() { def stringNum = "123" int expectedInt = 123 int intNum = new Integer(stringNum) assertEquals(intNum, expectedInt) }

6. Цяло число # стойностОт

Подобно на Integer.parseInt () , ние също можем да използваме статичния метод на Java Integer # valueOf :

@Test void givenString_whenUsingValueOf_thenConvertToInteger() { def stringNum = "123" int expectedInt = 123 int intNum = Integer.valueOf(stringNum) assertEquals(intNum, expectedInt) }

7. Десетичен формат

И за последния ни метод можем да приложим класа DecimalFormat на Java :

@Test void givenString_whenUsingDecimalFormat_thenConvertToInteger() { def stringNum = "123" int expectedInt = 123 DecimalFormat decimalFormat = new DecimalFormat("#") int intNum = decimalFormat.parse(stringNum).intValue() assertEquals(intNum, expectedInt) }

8. Обработка на изключения

Така че, ако преобразуването е неуспешно, например ако има нецифрени знаци, ще бъде хвърлен NumberFormatException . Освен това, в случай че String е null , NullPointerException ще бъде хвърлен:

@Test(expected = NumberFormatException.class) void givenInvalidString_whenUsingAs_thenThrowNumberFormatException() { def invalidString = "123a" invalidString as Integer } @Test(expected = NullPointerException.class) void givenNullString_whenUsingToInteger_thenThrowNullPointerException() { def invalidString = null invalidString.toInteger() }

За да предотвратим това, можем да използваме метода isInteger :

@Test void givenString_whenUsingIsInteger_thenCheckIfCorrectValue() { def invalidString = "123a" def validString = "123" def invalidNum = invalidString?.isInteger() ? invalidString as Integer : false def correctNum = validString?.isInteger() ? validString as Integer : false assertEquals(false, invalidNum) assertEquals(123, correctNum) }

9. Обобщение

В тази кратка статия показахме някои ефективни начини за превключване от String към Integer обекти в Groovy.

Що се отнася до избора на най-добрия метод за преобразуване на тип обект, всичко по-горе е еднакво добро. Най-важното е да се избягват грешки, като първо се провери дали стойността на String в нашето приложение може да бъде нецифрена, празна или нулева .

Както обикновено, всички примери за код могат да бъдат намерени в GitHub.