1. 概述
在这个教程中,我们将探讨在Java中以优雅的方式封装将字符串转换为整数的方法的不同方式。
2. 问题描述
Integer.parseInt() 方法通常用于将字符串转换为整数,但如果输入不是数字时,它会抛出异常。
使用 try-catch 块来处理这个异常可能会使代码变得重复且难以阅读:
try {
return Integer.parseInt(input);
} catch (NumberFormatException e) {
logger.error("Encountered an exception while converting string to int");
}
相反,我们可以将转换逻辑封装在一个方法中,处理异常并返回一个错误时的合适值。这也有助于未来修改或更新错误处理逻辑。
现在,让我们来看看实现这种封装的一些方法。
3. 封装转换
本节将探讨几种将字符串转换为整数逻辑封装的方法。我们可以使用 Optional 来封装 Integer 类的结果,或者表示转换失败:
3.1. 使用 Integer.parseInt()
我们可以使用 Integer 类提供的 parseInt() 方法将字符串值转换为整数。一个 try-catch 块可以处理所有异常,特别是 NumberFormatException,并在出现错误时返回默认值:
Optional<Integer> convertStringToIntUsingIntegerParseInt(String input) {
try {
return Optional.of(Integer.parseInt(input));
} catch (NumberFormatException e) {
return Optional.empty();
}
}
此方法利用了自动装箱(autoboxing)将基本类型 int 转换为其对应的包装类 Integer。
3.2. 使用 Integer.valueOf()
在Java中,valueOf() 方法是某些类(如 String, Integer, Double 等)的静态方法,用于将值的字符串表示转换为对应类的对象。
如果在 Integer 包装类上使用,它会内部调用 *parseInt()*。我们可以使用此方法在一个封装的方法中实现转换并处理错误:
Optional<Integer> convertStringToIntUsingIntegerValueOf(String input) {
try {
return Optional.of(Integer.valueOf(input));
} catch (NumberFormatException e) {
return Optional.empty();
}
}
3.3. 使用 Integer.decode()
Integer.decode() 的工作原理类似于 *Integer.valueOf()*,但也能接受其他一些数字表示,如十进制、十六进制和八进制:
Optional<Integer> convertStringToIntUsingIntegerDecode(String input) {
try {
return Optional.of(Integer.decode(input));
} catch (Exception e) {
return Optional.empty();
}
}
3.4. 使用Apache Commons的 NumberUtils
我们可以使用Apache Commons Lang 3库中的 NumberUtils 类提供的 Integer 转换方法。要在项目中使用该库,需要在 pom.xml 文件中添加依赖:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.14.0</version>
</dependency>
它接受一个默认值,当转换失败时返回。我们可以使用 toInt() 方法来实现封装: