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 .