Groovy中将字符串转换为整数
Contents
1. 概述
在这个简短的教程中,我们将展示在 Groovy 中从String转换为 Integer 的不同方法。
2. 用as
我们可以用于转换的第一个方法是as关键字,它与调用类的*asType()*方法相同:
@Test
void givenString_whenUsingAsInteger_thenConvertToInteger() {
def stringNum = "123"
Integer expectedInteger = 123
Integer integerNum = stringNum as Integer
assertEquals(integerNum, expectedInteger)
}
像上面一样,我们可以使用 as int:
@Test
void givenString_whenUsingAsInt_thenConvertToInt() {
def stringNum = "123"
int expectedInt = 123
int intNum = stringNum as int
assertEquals(intNum, expectedInt)
}
3. Integer
另一种方法来自java.lang.CharSequence 的 Groovy JDK 扩展:
@Test
void givenString_whenUsingToInteger_thenConvertToInteger() {
def stringNum = "123"
int expectedInt = 123
int intNum = stringNum.toInteger()
assertEquals(intNum, expectedInt)
}
4. Integer.parseInt()
第三种方法是使用Java 的静态方法Integer.parseInt():
@Test
void givenString_whenUsingParseInt_thenConvertToInteger() {
def stringNum = "123"
int expectedInt = 123
int intNum = Integer.parseInt(stringNum)
assertEquals(intNum, expectedInt)
}
5. Integer.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. Integer.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 的DecimalFormat类:
@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)
}