场景复现
现有一个场景,在处理发票信息时,我们常常会遇到将地址与电话、开户号与账号进行拼接的需求。在 Java 中,最简单的拼接方式是使用 + 运算符,但这种方式在处理 null 值时会产生一些问题。下面我们通过具体示例来详细分析并给出更好的解决方案。
import org.apache.commons.lang3.StringUtils;
public class StringConcatenationExample {
public static void main(String[] args) {
String a = null;
String b = "world";
String c1 = a + b;
String c2 = StringUtils.defaultString(a) + StringUtils.defaultString(b);
System.out.println(c1);
System.out.println(c2);
}
}
运行上述代码,打印结果如下:

从结果可以看出,当使用 + 运算符直接拼接包含 null 值的字符串时(如 c1),null 会被直接拼接到结果中,这显然不符合我们的预期,而且在实际应用中会让输出看起来很不美观,也不够人性化。
而使用 org.apache.commons.lang3.StringUtils 工具类的 defaultString 方法进行拼接(如 c2),则可以避免这个问题。defaultString 方法会在字符串为 null 时将其替换为空字符串,相当于给字符串设置了默认值。
StringUtils.defaultString 方法的核心逻辑其实就是判断传入的字符串是否为
null,如果是
null 则返回空字符串,否则返回原字符串。以下是该方法的简化示意:
public static String defaultString(String str) {
return str == null ? "" : str;
}
有些开发者可能会选择在拼接之前手动进行
null 判断,将
null 值替换为空字符串,示例代码如下:
public class ManualCheckExample {
public static void main(String[] args) {
String a = null;
String b = "world";
String result;
if (a == null) {
a = "";
}
if (b == null) {
b = "";
}
result = a + b;
System.out.println(result);
}
}
这种方式虽然也能实现相同的功能,但会使代码变得冗余。尤其是当需要拼接多个字符串时,需要编写大量的 null 判断代码,不仅增加了代码量,还降低了代码的可读性和可维护性。
在编写代码时,我们应该尽量使用官方或自定义的工具类。像 org.apache.commons.lang3.StringUtils 这样的工具类已经经过了大量的测试和优化,能够帮助我们更高效地处理字符串操作,减少代码冗余,同时也让代码的维护变得更加方便。
通过合理利用工具类,我们可以避免重复造轮子,将更多的精力放在业务逻辑的实现上,提高开发效率和代码质量。
综上所述,在处理发票信息拼接这类场景时,推荐使用工具类来处理 null 值,避免直接使用 + 运算符带来的问题。