Contents

Groovy中将字符串转换为整数

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。此外,在Stringnull的情况下,将抛出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)
}