Перейти к основному содержимому

Преобразование строки в целое число в Groovy

· 3 мин. чтения

Задача: Сумма двух чисел

Напишите функцию twoSum. Которая получает массив целых чисел nums и целую сумму target, а возвращает индексы двух чисел, сумма которых равна target. Любой набор входных данных имеет ровно одно решение, и вы не можете использовать один и тот же элемент дважды. Ответ можно возвращать в любом порядке...

ANDROMEDA

1. Обзор

В этом кратком руководстве мы покажем различные способы преобразования из строки в целое число в 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. целое число

Другой метод — из расширения 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)
}

Или, в этом случае, мы также можем использовать просто new Integer(stringNum) :

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

assertEquals(intNum, expectedInt)
}

6. Целое число#valueOf

Подобно 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 .